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

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

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

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

相关推荐
Elastic 中国社区官方博客18 分钟前
在 Elastic 中使用 OpenTelemetry 内容包可视化 OpenTelemetry 数据
大数据·开发语言·数据库·elasticsearch·搜索引擎
cui_ruicheng21 分钟前
Linux IO入门(一):从C语言IO到文件描述符
linux·运维·c语言
C+++Python21 分钟前
如何学习Python的应用领域知识?
开发语言·python·学习
疯狂打码的少年23 分钟前
【Day12 Java转Python】Python工程的“骨架”——模块、包与__name__
java·开发语言·python
全栈开发圈32 分钟前
新书速览|MATLAB数据分析与可视化实践:视频教学版
开发语言·matlab·数据分析
网域小星球38 分钟前
C 语言从 0 入门(二十二)|内存四区:栈、堆、全局、常量区深度解析
c语言·开发语言
晓纪同学1 小时前
EffctiveC++_第三章_资源管理
开发语言·c++·算法
蚊子码农1 小时前
每日一题--C语言指针与内存泄漏:一道小问题的深度复盘
c语言·开发语言
Fanfanaas1 小时前
Linux 系统编程 进程篇(一)
linux·运维·服务器·c语言·开发语言·网络·学习
星辰徐哥1 小时前
ARP缓存表:作用、查看方法与刷新技巧
开发语言·缓存·php