C语言函数调用详解(从中发现程序运行的秘密)
functionName(param1, param2, param3 ...);
functionName 是函数名称,param1, param2, param3 ...是实参列表。实参可以是常数、变量、表达式等,多个实参用逗号,分隔。在C语言中,函数调用的方式有多种,例如:
//函数作为表达式中的一项出现在表达式中
z = max(x, y);
m = n + max(x, y);
//函数作为一个单独的语句
printf("%d", a);
scanf("%d", &b);
//函数作为调用另一个函数时的实参
printf( "%d", max(x, y) );
total( max(x, y), min(m, n) );
函数的嵌套调用
函数不能嵌套定义,但可以嵌套调用,也就是在一个函数的定义或调用过程中允许出现对另外一个函数的调用。【示例】计算sum = 1! + 2! + 3! + ... + (n-1)! + n!
分析:可以编写两个函数,一个用来计算阶乘,一个用来计算累加的和。
运行结果:#include <stdio.h>
//求阶乘
long factorial(int n){
int i;
long result=1;
for(i=1; i<=n; i++){
result *= i;
}
return result;
}
// 求累加的和
long sum(long n){
int i;
long result = 0;
for(i=1; i<=n; i++){
//在定义过程现嵌套调用
result += factorial(i);
}
return result;
}
int main(){
printf("1!+2!+...+9!+10! = %ld\n", sum(10)); //在调用过程现嵌套调用
return 0;
}
1!+2!+...+9!+10! = 4037913
sum() 的定义现了对 factorial() 的调用,printf() 的调用过程现了对 sum() 的调用,而 printf() 又被 main() 调用,它们整体调用关系为:
main() --> printf() --> sum() --> factorial()
如果一个函数 A() 在定义或调用过程现了对另外一个函数 B() 的调用,那么我们就称 A() 为主调函数或主函数,称 B() 为被调函数。当主调函数遇到被调函数时,主调函数会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回主调函数,主调函数根据刚才的状态继续往下执行。
一个C语言程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条。这个链条的起点是 main(),终点也是 main()。当 main() 调用完了所有的函数,它会返回一个值(例如
return 0;)来结束自己的生,从而结束整个程序。函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码,当遇到函数调用时,CPU 首先要记录下当前代码块中下一条代码的地址(假设地址为 0X1000),然后跳转到另外一个代码块,执行完毕后再回来继续执行 0X1000 处的代码。整个过程相当于 CPU 开了一个小差,暂时放下手中的工作去做点别的事情,做完了再继续刚才的工作。
从上面的分析可以推断出,在所有函数之外进行加减乘除运算、使用 if...else 语句、调用一个函数等都是没有意义的,这些代码位于整个函数调用链条之外,永远都不会被执行到。C语言也禁止出现这种情况,会报语法错误,请看下面的代码:
#include <stdio.h>
int a = 10, b = 20, c;
//错误:不能出现加减乘除运算
c = a + b;
//错误:不能出现对其他函数的调用
printf("c.biancheng网站站点" rel="nofollow" />
- 随机文章
- 瑞士 还是 马尔代夫(瑞士和马尔代夫:如何选择你的梦想度假胜地?)
- 怀孕了 马尔代夫(喜讯:在马尔代夫怀孕!)
- 咸阳马尔代夫大水(咸阳遭受特大洪水,灾情严重损失惨重)
- 韩雪 马尔代夫(韩雪演绎马尔代夫美景)
- 盱眙 马尔代夫(盱眙旅行社开启马尔代夫之旅)
- 深圳航空马尔代夫(深航新增马代航班,畅享海岛度假天堂)
- 环球影城马尔代夫(环球影城马尔代夫:探索电影魔幻世界)
- 最美马尔代夫水房(梦幻马尔代夫水屋,浪漫体验最美海景)
- 美人蕉岛马尔代夫(探秘马代美人蕉岛,感受热带海岛风情)
- 飞鲸 马尔代夫(飞鲸推出马尔代夫专题,旅游新选择!)
- 邢台马尔代夫钓鱼(邢台男子在马尔代夫海岛享受钓鱼乐趣)
- 江西马尔代夫泳池(江西豪华度假村泳池仿若马尔代夫风情)
- 马尔代夫上岛流程(马尔代夫上岛攻略:顺畅上岛流程指南)
- 辽宁马尔代夫海岛(辽宁市民可赴马尔代夫私人岛屿度假!)
- 拖钓 马尔代夫(马尔代夫深受拖钓困扰,政府出手整治!)
- 马尔代夫中国西藏(中国西藏成功助力马尔代夫旅游业复苏)
- 马尔代夫上岛游艇(探索马尔代夫:私人游艇魅力上岛之旅)
- 北京 马尔代夫(北京将于近期复航前往马尔代夫的首批包机航班)
- 马尔代夫债务价格(马尔代夫陷入债务危机,经济价格承压)
- 马尔代夫县城图片(惊人图片展示马尔代夫县城的壮美景色)
- 马尔代夫免费玩水(免费玩水!马尔代夫度假村的惊人举措)
- 马尔代夫上海门口(马尔代夫遇袭事件:中国游客安全无恙)
- 王子 马尔代夫(王子酒店再登马尔代夫,开设奢华私人岛屿度假酒店)
- 淄博 马尔代夫(淄博旅游公司推出马尔代夫旅游,预订火热进行中)
- 马尔代夫印度泰国(三地旅游胜地:马尔代夫、印度、泰国)
- 超级翁婿马尔代夫(翁婿游马尔代夫:无与伦比的海滩假期)
- 新堤 马尔代夫(新堤:享受马尔代夫完美假期的偏远度假村)
- 马尔代夫哪些酒店(“精选马尔代夫酒店,度假胜地推荐”)
- 马尔代夫图片自拍(马尔代夫自拍奇拍,感受热带梦幻之旅)
- 马尔代夫图片情侣(浪漫夏日,马尔代夫情侣独享海岛风情)
