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

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 函数定义:

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

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

相关推荐
云栖梦泽26 分钟前
Linux内核与驱动:14.SPI子系统
linux·运维·服务器·c++
Gary Studio34 分钟前
安卓HAL C++基础-智能指针
开发语言·c++
还是阿落呀44 分钟前
基本控制结构2
c++
啧不应该啊1 小时前
Day1 Python 与 C 的类型区别
c语言·开发语言
多思考少编码1 小时前
PAT甲级真题1001 - 1005题详细题解(C++)(个人题解)
c++·python·最短路·pat·算法竞赛
cen__y1 小时前
Linux07(信号01)
linux·运维·服务器·c语言·开发语言
xingpanvip2 小时前
星盘接口开发文档:星相日历接口指南
android·开发语言·前端·css·php·lua
guygg882 小时前
基于遗传算法的双层规划模型求解MATLAB实现
开发语言·matlab
凯瑟琳.奥古斯特2 小时前
SQLAlchemy核心功能解析
开发语言·python·flask
卷Java2 小时前
GPTQ vs AWQ vs GGUF:模型量化工具横向测评
开发语言·windows·python