C语言形参和实参

目录

形式参数(形参)

实际参数(实参)

形参和实参的区别和联系 


如果把函数比作一台机器,那么参数就是原材料,返回值就是生产出来的产品,

函数便是根据不同的原材料生产不同的产品。

参数存在两个出现位置:1,函数定义处(形参) 2,函数调用处(实参)。两处的参数有所不同

形式参数(形参)

函数定义处的参数可以理解为一个占位符,本身没有数据,只能等待函数被调用时接收传递进来的数据

实际参数(实参)

函数被调用时的参数给出的是实实在在的数据,会被函数内部的代码使用,

实参与形参的功能是数据传递,当发生函数调用时,实参的值传递给形参


形参和实参的区别和联系

1) 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

4) 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

看下面的例子👇

#include <stdio.h>

//计算从m加到n的值
int sum(int m, int n) 
{
    int i;
    for (i = m+1; i <= n; ++i)
    {
        m += i;
    }
    return m;
}


int main() {
    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);
    return 0;
}

运行结果:
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,可见实参的值不会随形参的变化而变化。


或者我们可以修改这段代码,使形参与实参同名,但是二者是相互独立的,互不影响。

形参在函数内部有效,实参在函数外部有效。

#include <stdio.h>
//计算从m加到n的值

int sum(int m, int n) {
    int i;
    for (i = m + 1; i <= n; ++i)
    {
        m += i;
    }
    return m;
}


int main() 
{
    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);
    return 0;
}

运行结果:
Input two numbers: 1 100
m=1, n=100
total=5050

调用 sum() 函数后,函数内部的形参 m 的值已经发生了变化,而函数外部的实参 m 的值依然保持不变,可见它们是相互独立的两个变量,除了传递参数的一瞬间,其它时候是没有瓜葛的。


谢谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值