一、函数的嵌套调用和链式访问
函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。
函数可以嵌套调用,但是不能嵌套定义。
函数嵌套调用(正确)
#include <stdio.h> void new_line() { printf("hehe\n"); } void three_line() { int i = 0; for(i=0; i<3; i++) { new_line(); } } int main() { three_line(); return 0; }
函数嵌套定义(错误)
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> void A() { void B() { } } int main() { return 0; }
链式访问
把一个函数的返回值作为另外一个函数的参数
#include<stdio.h> #include<string.h> //strlen的头文件 int main() { //一般求字符串的长度写法: //int len = strlen("abcdef"); //printf("%d\n", len); printf("%d\n", strlen("abcdef")); //链式访问 strlen函数调用的返回值作为printf函数的参数 return 0; }
关于链式访问的例子----你知道为什么运行结果是4321吗?😉
#include<string.h> int main() { printf("%d", printf("%d", printf("%d", 43))); return 0; } //通过观察注意到打印的时候要先执行printf("%d", 43),而这个printf的返回值是什么呢? //查找printf的相关定义文档可知:它的返回值是总共被打印的字符的个数. //printf("%d",43) 打印43 4是一个字符,3是1个字符,总共被打印的字符的个数是2,所以这个printf的返回值是2 //接下来由内到外的第二层函数变为:printf("%d",2) 打印2 2是一个字符,这个函数的返回值是1 //最后变为printf("%d",1) 打印1 //所以运行结果是4321 //另外需要注意的是:如果%d后面有一个空格,这时与上面的运行结果就会截然不同 //例如:printf("%d ",43); 在屏幕上打印43,但是4,3,空格各占一个字符,总共被打印的字符的个数是3,这个函数的返回值是3
二、函数的声明和定义
注意:(对比函数和变量来看)
变量有声明和定义
函数也有声明和定义
函数声明:
- 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数
声明决定不了。 - 函数的声明一般出现在函数的使用之前。要满足先声明后使用。
- 函数的声明一般要放在头文件中的。
函数定义:
函数的定义是指函数的具体实现,交待函数的功能实现
1.定义变量时如果非要在后面定义,前面使用,编译器不认识,那么就必须在使用之前声明变量
int a ; //变量的声明 int main() { printf("%d\n",a); return 0; } int a = 10; //变量的定义
int a; //定义 因为后面没有int a 所以这句是定义,且全局变量不初始化是0 int main() { printf("%d\n", a); return 0; } //所以不管是变量还是函数,都得满足先定义后使用 或者 先声明后使用
2. 调用add函数将两数相乘的值给c
错误示范
int main() { int a = 10; int b = 20; int c = Add(a, b); printf("%d\n", c); return 0; } int Add(int x, int y) { return x * y; }
报错:
** 解决办法**:在调用之前声明函数
int Add(int x, int y); //声明函数(必须出现在调用Add函数之前,可以放在main内部或者外部) //也可以写成int Add(int,int); int main(){ int a = 10; int b = 20; int c = Add(a, b); printf("%d\n", c); return 0; } int Add(int x, int y) { //函数定义 return x * y; }
但是最好的写法如下:
int Add(int x, int y) { //函数定义并声明 return x * y; } int main() { int a = 10; int b = 20; int c = Add(a, b); printf("%d\n", c); return 0; }
在工程中应该怎么写?—分模块写
(1)创建一个头文件add.h,一个源文件add.c
(2)在头文件中进行函数的声明,在源文件中进行函数的定义
#include"Add.h" int main() { int a = 10; int b = 20; int c = Add(a, b); printf("%d\n", c); return 0; }
Add.c
Add.h
运行结果:
分模块的思想是什么样子的?
通过画图来看:
你学会了吗小伙伴们💕💕💕
记得点赞收藏么么哒~😘😘