9.3.1 形参和实参
形参在函数定义中出现,在整个函数体内都可以使用,但离开当前函数则不能使用。实参在主调函数中出现,当进入被调函数后,实参变量也不能使用。形参和实参的功能是进行数据传送,当调用函数时,主调函数会把实参的值传送给被调函数的形参,从而实现主调函数向被调函数传送数据。
C语言函数的形参和实参具有以下特点。
❑ 形参变量只有在调用时才分配内存单元,在调用结束后,即刻释放所分配的内存单元。因此,形参只在函数内部有效。结束函数调用返回主调函数后则不能再使用该形参变量。
❑ 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使实参获得确定值。
❑ 实参和形参在数量、类型、顺序上应严格一致,否则会发生“类型不匹配”。
❑ 函数调用中的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用中,形参的值会发生改变,而实参中的值不会变化。
实例9-2
提示用户输入1个数字,然后计算从1到此数字值的和,并输出结果
源码路径daima\9\9-2
本实例的实现文件为“xing.c”,具体实现代码如下。
int main(void) { int n; //声明变量 printf("input number\n"); scanf("%d", &n); //输入一个数字 s(n); //此处n为实参 printf("n_M=%d\n", n); //输出n的值 } int s(int n) //此处n为形参 { int i; for(i=n-1; i>=1; i--) n=n+i; printf("n_S=%d\n", n); //输出1到n的和 }
拓展范例及视频二维码
范例9-2-01:形参和实参的单向传递
源码路径:演练范例\9-2-01\
范例9-2-02:演示函数参数的求值顺序
源码路径:演练范例\9-2-02\
上述代码定义了一个函数s,该函数的功能是求自然数1~n的和。在主函数中输入n,并作为实参,在调用时将它传送给函数s的形参n(注意,本例的形参和实参的标识符都为n,但它们是两个不同的量,各自的作用域不同)。在主函数中用printf语句输出一次n值,这个n值是实参n的值。在函数s中也用printf语句输出了一次n值,但这个n值是形参最后取得的n值,它为0。从运行情况看,输入的n值为100。即实参n的值为100。把此值传给函数s时,形参n的初值也为100,在函数执行过程中,形参n的值变为5050。程序返回主函数之后,实参n的值仍为100。可见实参的值不随形参的变化而变化。
程序运行后将先提示用户输入一个整数,输入完毕并按下Enter键后将会进行求和运算,并输出计算结果。执行效果如图9-2所示。
图9-2 执行效果