哈喽大家好,今天给大家带来函数的浅层学习,介绍下函数的调用过程,对函数有一个大概的认识,希望今天的分享今后可以帮助到大家
一、函数
首先呢介绍下函数,函数的组成部分有函数的返回类型、函数命名、函数的传入参数,组成函数体,在函数体中编写自己的逻辑结构和功能实现。
接下来用一个实现俩位整数相加的运算来带大家体会下函数的使用
#includeint Add(int x , int y)//此时的x,y为形参 { return x+y; } int main() { //实现一个俩位整数相加的函数 int x = 10; int y = 20; printf("%dn",Add(x,y));//此时的x,y为实参 return 0; }
上述代码中,Add为函数的命名,int为函数的返回类型,x、y为传入函数的参数(在写函数时,需要写出传入参数的类型),以上构成了Add函数的函数体,用return像主函数main返回计算值,这个过程就为一个简单的函数调用。
但是我像与大家分享的不止这么简单。
传入主函数中调用函数传入的参数为实参,将实参传入函数体中的形参,发生形参实例化,进行临时拷贝,验证放法呢通过取用这俩个参数的地址来证明。
#includeint Add(int x , int y) { //这里打印的是Add函数的形参地址 printf("Add &x:%pnAdd &y:%pn",&x,&y); return x+y; } int main() { //实现一个俩位整数相加的函数 int x = 10; int y = 20; printf("%dn",Add(x,y)); //这里打印的是主函数的实参地址 printf("main &x:%pnmain &y:%pn",&x,&y); return 0; }
下面便是运行后的结果,可见在俩个函数中,x与y的地址不一样,说明这俩变量并不是一个变量,但这俩个数值是相同的,这就说明函数在传入参数的时发生形参实例化,就是将实参的数值拷贝给形参,并在形参内重新定义的变量开辟的空间,俩者并不是一样的。大家也可以改变Add函数的形参定义名来体现x与y不是同一个。
当然这个传入的参数方式是传值传参,还有另一种方式便是传址传参,那就是传入给形参的是地址值,也就是指针。
二、指针
指针在c语言中,是一个非常重要的模块,而指针最大的作用便是提高编译器在查找数据时可以快速的定位数据。指针的相关简要理解:
1、指针常量:指针常量就是我们经常说的指针,也就是一个数据的地址值,像上述x、y的地址,也叫做x、y的指针。
2、指针变量:指针变量顾名思义是一个变量,用来存放常量的一个自定义数据,如我们常写的语句 int a = 10;其中a为一个整形变量,10为一个整形数据;类比为指针变量的定义语句 int* p = &a;其中p为一个整形指针变量,&a为一个指针常量存入p中。
3、指针的解引用:指针解引用就是指向其目标,应用指针指向变量地址,引用此变量的内容
对指针的简单概念这样,大家可以自行理解下这个概念,下面用代码带大家理解下指针
#includeint Add(int* x , int* y) { //这里打印x、y指针变量存放的数值 printf("Add &x:%pnAdd &y:%pn",x,y); return *x + *y; } int main() { //实现一个俩位整数相加的函数 int x = 10; int y = 20; printf("%dn",Add(&x,&y)); //这里打印的是主函数的实参地址 printf("main &x:%pnmain &y:%pn",&x,&y); return 0; }
上述在main函数和add函数中的x、y地址值相同,因为在add函数中,我们用的函数参数类型为整形指针,所以发生形参实例化存放的时main函数定义的x、y值的地址,说明add里x、y值解引用后就是main函数里的x、y存放的数值,(这里大家可以通过更改add函数里的x、y解引用后的值,在main函数里打印验证即可)



