这篇文章主要讲解一下C语言函数的一些基本知识。
C语言中的函数又常常被称为子程序,是用来完成某项特定的工作的一段代码。就像我们生活中的模块化建造技术,类比模块化建房子的过程:整个程序好比最终要建成的房子,而函数所代表的就是每部分模块(如第一层,第二层或者屋顶···),将这些模块灵活的拼接,就搭建成了最后的房子。
从函数的定义角度:我们可以把函数分为库函数和自定义函数
库函数是由C语言编译系统提供的,已经有一定功能的,我们只需在程序前包含有该函数原型的头文件就可以直接使用这些函数。
比如我们常用的 printf函数:
#include
// 就是包含printf函数的头文件 int main ()
{
printf("yeah"); // printf就是C语言提供的有打印功能的库函数,不需要我们自己定义
}
寻找C中的库函数及其有关的头文件的网址(C/C++官方的链接):
http://zh.cppreference.com/w/c/header
是由用户根据需要自行编写的函数,创建格式如下:
ret_type name(形式参数)
{
函数体(用来描述函数执行过程的部分)
}
创建例子:
#include
//int 决定了z的返回类型是整形 int plus(int x,int y) //plus是函数名 //int x,int y规定了输入的形式参数的类型应该是整形
{
int z = 0;
z = x + y;
return z;
}这个函数的作用就是计算两数之和。
写好这个函数以后,若调用这个函数,函数就会计算所输入的两个值之和,然后返回给主调函数
知识点:
ret_type指返回类型(即函数计算结果的类型,如:int 、double···;也可以是void,表示什么都不返回)
· 下面对函数的返回值进行解释说明:
从是否有返回值的情况,函数可分为:有返回值函数和无返回值函数
有返回值函数:这类函数在执行完以后,会通过return语句向调用者返回一个执行结果
无返回值函数:这类函数只是把函数体执行完,然后继续执行程序后面的语句,并不会向调用者返回任何值
功能:计算表达式的值,并返回给主函数
① return语句后面可以是数值也可以是表达式,如果是表达式,则先计算表达式,再返回
② 若return语句返回的值和函数的返回类型不一样,系统会将返回的值转换成函数的返回类型
③ return语句执行后,函数是彻底返回(不会在执行后面的语句)
④ 当函数存在分支语句,则要保证每种情况下都有return返回
⑤ 当返回类型是void这种不需要返回的,可以省略return,或者return语句后面不跟表达式
形式参数:是在定义函数时确定的,只能是变量,只有在被调用时才分配内存单元,在调用结束后,立刻释放所分配的内存单元。
实际参数:可以是常量,变量,表达式,函数值等。在函数调用时,它们必须要有确定的值,以便把这些值传递给形参。
实参数值的传递要注意:
1,实参和形参在数量上,顺序上要严格保持一致
2,实参和形参的数据类型必须兼容,并且以形参的数据类型为主
关于形参内存分配的理解:
请看下面的代码:
函数swap的作用是交换a,b的值,可是为什么最后打印出的结果却还是10,20呢?
这里我们就要理解一下形参的内存分配和实参的内存分配的区别:
(1)int a,b时:a,b作为实参在创建时是直接分配了内存空间
(2)到调用 swap(a,b)这时候是把实参a,b的值传递给形参(也就是传递给函数()里面 的变量),形参得到值才会分配新的空间,并且这个内存空间和函数外实参的空间是不一样的
(3)最后在函数执行完以后,形参a,b的内存空间被释放
所以,从始至终,函数并没有对函数外的实参进行操作,函数改变的只是附有实参的数值的形参。
我们继续用这个图来解释:
函数名(实际参数列表); //分号不能省
如上图,调用swap函数:
swap(a,b);
说明:
1,无参数函数调用时,没有实参列表
2,实参列表中的参数(即实参)可以是变量,常量和表达式
3,实参之间用逗号隔开
4,在C语言中,出了main函数,其余的函数调用前要有函数声明(原型)
ret_type name(形式参数);
如上图若要声明swap函数:
void swap(int x,int y);
注意:上图中使用swap函数时没有声明是因为:上述的程序中函数的实现在前,而函数的实现属于特殊的声明
C语言中的函数之间都是平行的,不分上下级。因此不能在一个函数里定义另一个函数,但是可以在定义函数的时候调用其他函数。
下面对函数的嵌套调用进行举例:
这个程序中有三个函数main(),fac(),comb(),他们之间的嵌套关系如下:
在main函数中调用了comb函数来进行分式计算;在comb函数中又调用了fac函数来计算n!,m!和(n-m)!
时光总是这么快,一下就看到结尾啦!
我的分享也就到此结束啦
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!嘿嘿,王子,公主请一键三连!(✪ω✪)
感谢大家的观看和支持!最后,☺祝愿大家天天开心!!!
开心是一天,不开心也是一天,为什么不开开心心的过好每一天呢!!!