扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
函数调用过程如下:
创新互联建站是一家专业提供青岛企业网站建设,专注与网站建设、成都网站建设、HTML5、小程序制作等业务。10年已为青岛众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
参数入栈
执行流转到函数开始地址
执行函数
函数执行完毕,返回。
平衡堆栈
大致是这样,根据调用约定不同,可能会有稍许差别。
C语言中没有过程的概念,只有函数。 PASCAL语言中的过程和函数到了C语言中全部都是函数,而过程就是没有返回值的函数。
一个程序开始运行时,运行的是主程序段。之后主程序调用的其他程序段就叫子程序。
C语言的程序段都是以函数形式存在,所以除了主程序main()以外,其他程序中出现的函数都是子程序。
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。
目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
从主函数fun(6,x)开始调用。调用的时候,实参6和x将自身的值传递给形参n,s,接着,开始执行fun函数体内的语句第一次调用:判断if(n==0||n==1),此时的n值为6,不满足条件,执行else部分语句。 fun(n-1,f1);fun(n-2,f2);先调用fun(n-1,f1);而fun(n-2,f2);需要当fun(n-1,f1);符合if条件以后才轮到它执行第二次调用:此时,形参n=6转变为实参n,fun(n-1,f1)等价于fun(5,f1),继续判断,if(n==0||n==1),又不满足条件,于是,重复之前的操作,转向else部分执行。 fun(n-1,f1);fun(n-2,f2);此时的n=5,同样是先调用fun(n-1,f1);后面那个fun(n-2,f2);同样处于等待状态,等待前面的 fun(n-1,f1);符合IF条件后才轮到它执行,于是,fun(n-1,f1);就这样一层一层执行下去,每执行一次,n的值减一,当n=1的时候,执行if部分,这时,便可以在fun(n-1,f1);执行完毕只有继续执行fun(n-2,f2);,接着,返回前一次调用的状态,开始执行fun(n-2,f2);比如当n=2的时候,执行完fun(2-1=1,f1)以后,便开始执行fun(2-2=0,f2);和它后面的语句,最终,函数返回上一次调用的状态,即fun(3,f1);此时,fun(3,f1)已经执行完毕,因为之前我们已经把fun(2,f1)执行完了,接着,应该执行的是fun(3-2=1,f2);当这个函数最后终也符合if部分要求,又返回到前面的fun(4,f1),执行完后,开始执行fun(4,f2),这样一个流程。通常来说,递归可以简化代码,但同时也会增加系统开销并且让程序阅读的时候要比正常的顺序程序难以理解一些。不过,现代的硬件飞速发展,用递归是完全可以的。
就是,实参是主函数调用函数的时候传进去的那个,形参就是在被调用函数中的,代表那个实参的值。#includeint fun(int n){ return n+2;}int main(){ int a; a=1; int b; b=fun(a);}a就是实参,函数中的 int n 就是形参。形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。 2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。 3.实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。 4.函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流