2.6 如何传递参数
C程序是由多个函数组合而成的。当函数间互相调用(Call)时,主函数给予函数礼物(参数),子函数接到参数后,会做些运算工作,再把运算结果回赠(Return)给主函数。例如:
#include <stdio.h> void sub( int x ) { printf( "x=%d", x ); } int main(void) { sub( 30 ); /* CALL sub() and PASS 30 to x */ return 0; }
main()内的指令——sub(30)调用sub() 函数且赠送礼物30。sub() 接收到礼物后立刻存入x中,使x值为30。如果main()代表圣诞老人,30代表圣诞礼物的个数,那么x就是装礼物的袜子。当此程序执行时,由main()的“{”执行到sub(30)指令,便将30传递给x,同时转移到sub()的“{”,开始执行sub()内的指令,一直到sub()的“}”止,再返回main(),继续执行sub(30)后的指令,直到main()的“}”,就全部结束了。
main()送给sub()的礼物是整数常数30。sub() 必须以int变量接受它。主函数送给子函数一些礼物,子函数处理后,常会回赠给主函数。例如:
int sub() { return 8; } int main(void) { printf( "%d", sub() ); return 0; }
sub() 的return指令将8传回给main()。此时sub() 值就是8,亦即指令print(f "%d", sub(),相当于printf("%d", 8)
请再看个例子:
int dog( int p ) { return( p*2 ); } int main(void) { int x; x = dog( 5 ); printf( "x=%d", x ); x = dog( 10 ); printf( "x=%d", x ); return 0; }
当计算机执行x=dog(5)指令时,先计算dog(5)的值,于是执行dog() 内的指令。因p值为5,return指令将p*2的值10传回main(),所以dog(5)的值为10。归纳如下。
● 当计算机执行dog(5)时,操作为:
第1步——将5传给dog()的p变量。
第2步——跳到dog()执行其内的指令。
● 当计算机执行return(p*2)时,操作为:
第1步——将p*2的值传回main(),就成为dog(5)的值。
第2步——返回main(),继续执行。
得到dog(5)的值为10,则指令x=dog(5)相当于x=10,因此x的值为10且由printf()显示于显示器上。
接下来,x=dog(10)将10传给dog(),得p值为10。指令return(p*2)将20传回main(); 得dog(10)值为20,且存入x,得x值为20。最后,printf()将20显示于显示器上。