形参和实参的区别


图示

#include <stdio.h>

void swap(int a,int b)
{
    int t = a;
    a = b;
    b = t;

}
int main(void){
    int a=5;
    int b=6;
    swap(a,b);
    printf ( "a=%d , b=%d\n", a, b);
    return 0;
}

输出结果:
a=5 , b=6

形参和实参的区别

在C语言中,形参和实参的区别可以通过以下例子来说明:

形参(Formal Parameters)
形参是在函数定义时声明的参数,它们是函数签名的一部分,不包含实际值,只有在函数被调用时才会通过实参传递得到值。

例如:

void swap(int a, int b) {
    // 这里的 a 和 b 是形参
    int temp = a;
    a = b;
    b = temp;
    // 此函数内部交换 a 和 b 的值,但 a 和 b 只在函数内部可见和有效
}

在这个 swap 函数中,int aint b 是形参,它们在函数定义时并不具有实际的值。

实参(Actual Parameters)
实参是在调用函数时传递给函数的实际值或变量。

例如:

int main() {
    int x = 5, y = 10;
    
    // 在这里,x 和 y 是实参
    swap(x, y);

    printf("After swapping: x = %d, y = %d\n", x, y);
    
    return 0;
}

在上述 main 函数中调用 swap 函数时,xy 分别作为实参传递给 swap 函数的形参 ab。虽然在 swap 函数内部交换了 ab 的值,但由于C语言中函数参数默认采用值传递方式,所以在函数调用结束后,实参 xy 在主调函数(这里是 main 函数)中的值并未改变(如果是指针传递,则情况会不同)。

总之,形参在函数定义阶段只是待接收值的占位符,实参则是在函数调用时提供给形参的具体值。在上述C语言的例子中,swap 函数尝试交换的是其内部的形参 ab 的值,而不是直接改变了主调函数中 xy 的值。


下面是一个比喻

假设你是一位厨师,正在教一位初中生如何按照食谱做一道菜——交换两碗食物。在这个比喻中:

形参就像是食谱上要求的“碗1”和“碗2”,它们是你在写菜谱(也就是编写函数)时提到的两个空位置,用来暂时存放要处理的食物。

// 这个函数就像一个菜谱步骤
void 交换食物(int1, int2) {
    // 在这个函数内部,碗1 和 碗2 就像是形参,用来暂存食物
    int 临时碗 =1; // 把碗1的食物倒进临时碗1 =2;        // 把碗2的食物倒进碗12 = 临时碗;     // 把临时碗的食物倒进碗2
}

实参则是实际做饭时,真正装着食物的碗。当你根据菜谱做菜(也就是调用函数)时,你会拿着自家的两个碗(里面装着真正的食物)去执行这个步骤。

int main() {
    int 碗A = "苹果"; // 假设这是一碗苹果
    int 碗B = "香蕉"; // 假设这是一碗香蕉
    
    // 当你调用函数时,碗A 和 碗B 就是实参
    交换食物(碗A, 碗B);

    // 虽然函数内部交换了食物,但在外面,原本的碗A和碗B的内容不变
    printf("交换后:碗A = %s, 碗B = %s\n", 碗A, 碗B); // 输出可能还是原来的苹果和香蕉

    return 0;
}

在这个例子中,由于C语言的“值传递”特性(就像真实的实物无法通过简单交换位置而改变原有容器内的东西一样),当我们在函数内部交换“形参”碗1和碗2的食物时,外部实参碗A和碗B中的食物是不会变的。如果想要修改实参本身的值,通常需要通过指针或其他间接访问的方式实现。在现实生活中,如果你真的想交换两碗食物,就需要借助第三只碗来完成。在C语言中,如果希望交换两个变量的值,也往往需要借助第三个临时变量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qi_N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值