文章目录
1.什么是函数?
这是维基百科中对于函数定义,通俗的理解函数可以将函数理解为组成程序的一个个零部件,函数组成了文件,文件组成了一个个的工程。
2.C语言中函数的分类
1.库函数
那么了解了库函数我们还要学习如何使用库函数,这里我推荐一个网站,上面可以查到许多的库函数,完全可以满足我们的使用。cplusplus
2.自定义函数
下面我们来学习自定义函数的结构。
int add(int x,int y)
{
int z = x + y;
return z;
}
1.返回类型(也即是函数的返回值的类型,因为这个函数求得是两个变量得和,所以返回值也是int。)
2.函数名(add,其他函数调用该函数时,就会使用到函数名)
3.形参声明(int x, int y)用来提示形参能接受什么类型的值
4.函数题,就是大括号内的复合语句用来实现函数功能。
3.函数的参数
1.实际参数
我们在调用函数时实际传给函数的参数就是实际参数。
实参可以是变量常量表达式等,但是在函数调用的时候他们必须有确定的值以便传给函数。
int main()
{
int a = 3;
int b = 4;
int c = 0;
c = add(a,b);//该行代码就是函数调用,a,b就是
传给函数的实参。
return 0;
}
2.形式参数
4.函数的调用
1.传值调用
int sub(int x,int y)
{
return x-y;
}
int main()
{
int a = 3;
int b = 4;
int c = 0;
c = add(a,b);//该行代码就是函数调用,a,b就是
传给函数的实参。
return 0;
}
这是函数的传值调用,在sub函数内改变形参x,y不会影响到外面的实参a,b。
2.传址调用
即将实参的地址传给函数的形参,形参与实参指向同一块内存空间,这时改变形参就会改变实参
void Swap(int* x,int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
int main()
{
int a=4;
int b=1;
Swap(&a,&b);//想要交换实参的值就得传地址
return 0;
}
这个函数就通过传址调用实现了在函数内部交换函数实参的值。
5.函数的嵌套调用和链式访问
1.嵌套调用
嵌套调用是指在函数内部调用另一个函数。
#include<stdio.h>
void Print()
{
printf("kisskel");
}
void Text()
{
ptintf("hello ");
Print();
}
int main()
{
Text();
return 0;
}
上述代码简单演示了函数的嵌套调用,在main函数内部调用Text函数,又在Text函数内部调用了Print函数。
2.链式访问
#include<stdio.h>
int main()
{
printf("%d",ptrintf("%d",printf("43")));
return 0;
}
上述代码是典型的链式访问,printf函数的返回值是打印字符的个数,所以上述代码执行结果为
6.函数的声明和定义
了解函数的声明和定义之前我们要知道,函数是可以跨文件访问的,为什么函数可以跨文件使用,因为实际工程中若是所有函数都集中在一个.c文件,那么维护起来会非常复杂。
1.函数声明
通常函数的声明和头文件的引用都会放在头文件中。
#ifndef __TEST_H__
#define __TEST_H__
#include<stdio.h>
int Add(int x, int y);//函数声明
...
#endif
2.函数定义
函数定义通常放置在.c文件中
//test.c
int add(int x,int y)
{
return x+y;
}
函数的具体实现就在这里完成。
7.函数递归
想要了解函数递归,请移步此博客。
因为C语言的函数极为重要可以说,函数是组成程序的零件,所以函数板块后续还会有两篇博客,函数栈帧的创建和销毁,函数设计原理原则。