30.【C语言】函数系列下

1.嵌套调用

*定义:函数之间的互相调用

*例:

cpp 复制代码
int function1(int a, int b)
{
	function2(b);//嵌套函数的调用
	return a;
}
//注意:不能将function2定义在function1的里面,这不叫嵌套函数的调用
void function2(int c)
{

}
#include <stdio.h>
int main()
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);
	function2(e);
	return 0;
}

2.链式访问

*定义:将一个函数的返回值作为另外一个函数的参数,像链条一样将函数串起来就是函数

的链式访问

cpp 复制代码
#include <stdio.h>
#include <string.h>
int main()
{
	printf("%zd", strlen("abc"));
	return 0;
}

strlen函数的返回值作为printf的参数

练习:求打印结果

cpp 复制代码
#include <stdio.h>
int main()
{
	printf("%d", printf("%d",printf("%d",123)));
	return 0;
}

3个printf,由里向外执行

查阅printf的返回值:字符的个数

printf - C++ Reference

打印123,返回3作为参数给printf,打印3返回1作为参数给printf,打印1

结果:12331

3.函数的声明和定义

*单个文件的声明

如果将上述代码上下颠倒

cpp 复制代码
#include <stdio.h>
int main()
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);
	function2(e);
	return 0;
}
int function1(int a, int b)
{
	function2(b);//嵌套函数的调用
	return a;
}
//注意:不能将function2定义在function1的里面,这不叫嵌套函数的调用
void function2(int c)
{

}

编译器报错:

原因:C语言编译器对源代码进行编译的时候,是从第一行往下扫描的,所以函数的调用一定要满足,先声明,后使用(注意区分函数的定义,声明,调用)(函数定义也是特殊的声明)

修改后:

cpp 复制代码
#include <stdio.h>
int function1(int a, int b);//函数的声明,注意加;
void function2(int c);//函数的声明,注意加;
int main()
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);//函数的调用
	function2(e);//函数的调用
	return 0;
}
int function1(int a, int b)//函数的定义
{
	function2(b);//嵌套函数的调用
	return a;
}
//注意:不能将function2定义在function1的里面,这不叫嵌套函数的调用
void function2(int c)
{

}

*多个文件的声明

一般地,函数的声明、类型的声明放在头文件(.h)中,函数的实现是放在源文件(.c)文件中

优点:方便写作;代码隐藏;模块化,代码可复用

test.h

cpp 复制代码
int function1(int a, int b);//函数的声明,注意加;
void function2(int c);//函数的声明,注意加;

function1.c

cpp 复制代码
int function1(int a, int b)//函数的定义
{
	function2(b);//嵌套函数的调用
	return a;
}

function2.c

cpp 复制代码
void function2(int c);//函数的声明,注意加;
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);//函数的调用
	return 0;
}

main.c

cpp 复制代码
#include "test.h"//注意是双引号!
int main()
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);//函数的调用
	function2(e);//函数的调用
	return 0;
}

补:引用头文件用< >还是" "的区别

< > 官方提供的库定义

" " 自定义的或项目特定的头文件

相关推荐
tachibana235 分钟前
Go 语言里的 Context 是什么?
开发语言·后端·golang·go·语言
天桥下的卖艺者40 分钟前
R语言使用ggcube包轻松绘制文章中的各类3D图形
开发语言·3d·r语言
爱读书的小胖2 小时前
LeetCode 88. 合并两个有序数组 C 解题分析
c语言·数据结构·算法
唐钰小宝B2 小时前
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
java·开发语言·windows
inrichtt2 小时前
第七课时:STM32时钟系统揭秘:从零理解时钟树
c语言·数据结构·stm32·单片机·嵌入式硬件
知识分享小能手3 小时前
C学习教程,从入门到精通,C语言指针 —— 详细知识点总结(10)
c语言·开发语言·学习
熊猫钓鱼>_>3 小时前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙
金融小师妹3 小时前
多因子时间序列分析:美元与美债收益率变化对黄金价格+1.6%的影响
c语言·人工智能·git·决策树·pyqt
张张123y3 小时前
# 后端第七课:FastAPI 实战入门(用刚学的 Python 写第一个 API 接口)
开发语言·python·mysql·api·fastapi
小陈不好吃3 小时前
Java 泛型与类型擦除:从 PECS 原则到 TypeToken 绕过
java·开发语言·windows·pecs 原则·typetoken绕过