一.函数的概念:
在维基百科中对函数的定义是子程序,子程序的意思就是在一个大程序中的一个小程序,也就是大程序中的一小部分,当我们写代码要达到多个目的是,我们就可以通过多个子程序(函数)来一步一步的实现我们的目的。
函数分为两类,一类是库函数,另一类则是自定义函数。
1.库函数函数是非常常见的,比如我们刚开始学C语言的时候要用到printf库函数来打印hello word的时候我们就要在该文件中加入stdio.h头文件,那这到底是为什么呢?这是因为printf库函数是只有在该头文件中才能进行,你可以理解成库函数是别人帮我们写好的函数,在使用该函数前要先和别人打声招呼才可以使用,库函数的好处显而易见,它可以大大方便了我们写代码,同时也避免了不同的人想要打印一个东西时出现多种不同的函数写法,使的开发效率更高。注意写库函数时必须加上头文件才可以使用。
这里推荐个方便我们学习库函数的学习网站:http://www.cplusplus.com
这个网站非常好用,只要我们在上面输入我们想知道的库函数就可以得到该函数的相关信息。
2.自定义函数:相信大家都听过一句话“如果库函数能帮我们解决所有问题那还要程序员干嘛?”是的这句话说的一点也没错,在我们编写带码的时候我们更多的是使用自定义函数,尤其是一些解决一些复杂问题的函数,程序员存在的意义也在于此。
自定义函数代码示例如图:
实参和形参的区别:
实参是真实传给函数的参数,它已经是占据了内存,实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
而形参是不占据内存的,它在自己的自定义执行完后就会自动销毁除非形参里的参数是个地址,那就可以改变实参从而改变函数
函数的调用:
一.传值参数
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
代码示例如下:
#include<stdio.h>
int swap(int x, int y)
{
int m = x;
x = y;
y = m;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:%d %d\n", a, b);
swap(a,b);
printf("交换后:%d %d\n", a, b);
return 0;
}
如上图所示因为占据不同的内存块所以形参是不会影响实参的最后输出的,所以传值调用只能把实参放进形参的函数,形参而不能改变实参。为了解决这一问题我们就要用到传址调用。
2.传址调用:
传址调用顾名思义就是把实参的地址传到给形参进而使得自定义的函数与外部的主函数的变量建立起真正的联系,所以就可以通过这样使得在自定义函数内部改变主函数的变量,代码示例如图:
#include<stdio.h>
int swap(int*x, int*y)
{
int m =*x;
*x = *y;
*y = m;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:%d %d\n", a, b);
swap(&a,&b);
printf("交换后:%d %d\n", a, b);
return 0;
}