目录
前言形参(形式参数)实参(实际参数)形参和实参的区别和联络
前言
假设把函数比喻成一台机器,那么参数就是原资料,返回值就是最终产品;从一定水平上讲,函数的作用就是根据不同的参数产生不同的返回值。
这一节我们先来讲解C语言函数的参数,下一节再讲解C语言函数的返回值。
C语言函数的参数会出如今两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。
形参(形式参数)
在函数定义中呈现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传送进来的数据,所以称为形式参数,简称形参。
实参(实际参数)
函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。
形参和实参的功能是传送数据,发生函数调用时,实参的值会传送给形参。
形参和实参的区别和联络
1) 形参变量只要在函数被调用时才会分配内存,调用完毕后,立即释放内存,所以形参变量只要在函数内部有效,不能在函数外部使用。
2) 实参可以是常量、变量、表达式、函数等,无论实参是何品种型的数据,在停止函数调用时,它们都必需有确定的值,以便把这些值传送给形参,所以应该提早用赋值、输入等办法使实参获得确定值。
3) 实参和形参在数量上、类型上、顺序上必需严格一致,否则会发生“类型不匹配”的错误。当然,假设可以停止自动类型转换,或者停止了强迫类型转换,那么实参类型也可以不同于形参类型。
4) 函数调用中发生的数据传送是单向的,只能把实参的值传送给形参,而不能把形参的值反向地传送给实参;换句话说,一旦完成数据的传送,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。
请看下面的例子:
#include<stdio.h>
//计算从m加到n的值
intsum(int m,int n){
int i;
for(i = m+1; i <= n;++i){
m += i;
}
return m;
}
intmain(){
int a, b, total;
printf("Input two numbers: ");
scanf("%d %d",&a,&b);
total =sum(a, b);
printf("a=%d, b=%d\n", a, b);
printf("total=%d\n", total);
return0;
}运行结果:
Input two numbers: 1 100↙
a=1, b=100
total=5050
在这段代码中,函数定义处的 m、n 是形参,函数调用处的 a、b 是实参。通过 scanf() 可以读取用户输入的数据,并赋值给 a、b,在调用 sum() 函数时,这份数据会传送给形参 m、n。
从运行情况看,输入 a 值为 1,即实参 a 的值为 1,把这个值传送给函数 sum() 后,形参 m 的初始值也为 1,在函数执行过程中,形参 m 的值变为 5050。函数运行完毕后,输出实参 a 的值仍为 1,可见实参的值不会随形参的变化而变化。
以上调用 sum() 时是将变量作为函数实参,除此以外,你也可以将常量、表达式、函数返回值作为实参,如下所示:
total =sum(10,98);//将常量作为实参
total =sum(a+10, b-3);//将表达式作为实参
total =sum(pow(2,2),abs(-100));//将函数返回值作为实参5) 形参和实参虽然可以同名,但它们之间是互相独立的,互不影响,因为实参在函数外部有效,而形参在函数内部有效。
更改上面的代码,让实参和形参同名:
#include<stdio.h>
//计算从m加到n的值
intsum(int m,int n){
int i;
for(i = m +1; i <= n;++i){
m += i;
}
return m;
}
intmain(){
int m, n, total;
printf("Input two numbers: ");
scanf("%d %d",&m,&n);
total =sum(m, n);
printf("m=%d, n=%d\n", m, n);
printf("total=%d\n", total);
return0;
}运行结果:
Input two numbers: 1 100
m=1, n=100
total=5050
调用 sum() 函数后,函数内部的形参 m 的值已经发生了变化,而函数外部的实参 m 的值仍然坚持不变,可见它们是互相独立的两个变量,除了传送参数的一霎时,其它时候是没有瓜葛的。
到此这篇关于C语言形参与实参使用的差别讲解的文章就介绍到这了,更多相关C语言形参与实参内容请搜索网站以前的文章或继续阅读下面的相关文章希望大家以后多多支持网站! |