自学第十六天----深入理解函数中

4. 函数的调用:

4.1 传值调用

函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。

4.2 传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。

这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操 作函数外部的变量。

这两种其实就是上次我们说过的形参和实参的实际用法(区别)。

----------------------------------------------------- 华丽的分割线---------------------------------------------------------

写一个函数可以判断一个数是不是素数(用函数实现)

那我们现在来写一个函数实现这个目的

cpp 复制代码
#include<stdio.h>
int is_prime(int n)
{
	int j = 0;
	for (j = 2; j < n; j++)
	{
		if (n % j == 0)
			return 0;
	}
	return 1;
}

这里我们自定义了一个名为is_peime的函数,利用for语句判断n除以j取余数是否为0,来间接判断n是否为素数

cpp 复制代码
int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		if (is_prime(i) == 1)
		{
			count++;
			printf("%d  ", i);
		}
	
	}
	printf("\ncount=%d", count);
	return 0;

}

再利用我们自定义的函数再主函数中进行输出

啪~的一下子就成功勒!

这是完整的代码:

cpp 复制代码
#include<stdio.h>
int is_prime(int n)
{
	int j = 0;
	for (j = 2; j < n; j++)
	{
		if (n % j == 0)
			return 0;
	}
	return 1;
}

int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		if (is_prime(i) == 1)
		{
			count++;
			printf("%d  ", i);
		}
	
	}
	printf("\ncount=%d", count);
	return 0;

}

5. 函数的嵌套调用和链式访问

哇乍一看名字看起来好高级啊,(ps:我心想这肯定要费我很多时间学)

我再仔细看看

欸这不不就是《俄罗斯套娃》和《1×400接力》吗

5.1 嵌套调用

cpp 复制代码
#include <iostream>

void innerFunction() {
    std::cout << "This is the inner function." << std::endl;
}

void outerFunction() {
    std::cout << "This is the outer function." << std::endl;
    innerFunction(); // 调用内部函数
}

int main() {
    outerFunction(); // 调用外部函数

    return 0;
}

输出结果为

cpp 复制代码
This is the outer function.
This is the inner function.

函数可以嵌套调用,但是不能嵌套定义。

说白了就是可以在一个函数中可以调用其他函数,但在函数内部不能定义另一个函数。

你想嘛俄罗斯套娃是不是最里面就一个实心的娃娃,

而你外面用不一样大小不一样牌子的套都不影响他最里面的

5.2 链式访问

允许在调用多个函数时,将每个函数的返回值作为下一个函数的参数,以链式的方式连接起来,从而实现连续调用多个函数的效果。

cpp 复制代码
#include <iostream>

class MyClass {
public:
    MyClass& foo(int value) {
        // 进行一些操作
        std::cout << "foo: " << value << std::endl;
        return *this;
    }

    MyClass& bar(int value) {
        // 进行一些操作
        std::cout << "bar: " << value << std::endl;
        return *this;
    }

    MyClass& baz(int value) {
        // 进行一些操作
        std::cout << "baz: " << value << std::endl;
        return *this;
    }
};

int main() {
    MyClass obj;
    obj.foo(1).bar(2).baz(3); // 使用链式访问调用多个函数

    return 0;
}

这不就是跑步接力嘛。。。搞这么高级的名字唬人 ><

6. 函数的声明和定义

6.1 函数声明:

  1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。

  2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。

  3. 函数的声明一般要放在头文件中的。

格式是:

---先声明:返回类型 函数名(参数列表);

---再定义 返回类型 函数名(参数列表) {// 函数的代码逻辑}。

6.2 函数定义:

函数的定义是指函数的具体实现,交待函数的功能实现。

其实就是先在最前面让别人知道你使用了这个函数,然后后面再进行常规定义,我觉得呢这样的好处就是在代码很长的时候就可以快速查找使用的函数

相关推荐
Chester_19994 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲5 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员5 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导6 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan6 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子6 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化6 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251496 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
是隼人6 小时前
buuctf-pwn xdctf2015_pwn200题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
大衛說7 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习