在c语言编程中,传值方式和传引用方式之间有什么区别?

希望大家能给一个具体点的解释,我有点晕,谢谢... 希望大家能给一个具体点的解释,我有点晕,谢谢 展开
 我来答
风若远去何人留
推荐于2017-10-13 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450096
专业C/C++软件开发

向TA提问 私信TA
展开全部
在C语言中,并没有引用的概念,这个是C++的概念。
在C++的函数参数中,有两种形式,其中
TYPE & var的形式,称为传引用方式;
TYPE var的形式,称为传值。
二者的区别为,当传引用时,实际传到函数中的形参,是实际参数的一个引用,而不是仅传递值到函数中。具体的表现有以下几条:

1 传引用时,形参和实参是同一个变量,即使用相同的内存空间,二者有相同的地址。而传值时二者地址不同;
2 传引用时,由于没有新建变量,所以对于类对象参数,不会产生构造和析构。而如果是传值调用,调用时会进行构造,退出函数时会进行析构;
3 由于传引用使用的是原本实参的地址,所以对引用参数值的修改,会在退出函数后体现在主调函数中,而传值调用对参数的修改不会影响到主调函数。
悲伤0谢幕
推荐于2017-09-19 · TA获得超过327个赞
知道小有建树答主
回答量:379
采纳率:0%
帮助的人:241万
展开全部

传值方式:

当一个函数是传值方式的时候,你调用这个函数的时候传入的实参的值会被拷贝到形参,

但是形参与实参之间并没有什么联系,比如变量b=5,a=b;这个时候将b赋值给a,他们的值相等,但是当这以后无论a的值怎么改变都不会影响到b,b=5,a=b;a=1;这时候b依然是5,这就是传值方式


#include<stdio.h>
void add(int a,int b)
{
    a=a+b;//改变了形参a的值
    return a;
}

void main()
{
    int a=1,b=2;
    printf("%d\n",add(a,b));//3
    printf("%d\n",a);//1
    printf("%d\n",b);//2
}



传引用方式:

当你调用一个函数时,传入的是实参的地址的时候,这时候修改形参,实参也会受到影响,不过这种传地址某种意义是传值,首先将实参的地址拷贝到形参,他们两个以后就没有关系了,你也可以改变形参保存的地址,实参的地址不会改变,但是你操作的是形参对应地址的内容,与实参对应地址的内容一致,操作是同一个对象,所以形参对这个地址的操作,在实参那里也会看到效果



#include<stdio.h>
void add(int *a,int *b)
{
    *a=*a+*b;//改变了形参a的值
    return *a;
}

void main()
{
    int a=1,b=2;
    printf("%d\n",add(&a,&b));//3
    printf("%d\n",a);//3
    printf("%d\n",b);//2
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a1844658ce
2015-05-09 · 超过54用户采纳过TA的回答
知道小有建树答主
回答量:103
采纳率:0%
帮助的人:93万
展开全部
你应该知道什么是引用吧,比如int a=1;int &b=a;这样就是引用,这样也表示a就是b,b就是a。函数调用传参时,如函数B(int c),当调用函数B(a),这样就表示c=a=1;这样只是表示c的值为1,a只是给它赋值了,它只是等于1,与a没有关系了。但是如果调用B(int &c);,这样就表示int &c=a=1;这样不仅仅表示c等于1了,因为是传引用,这样C就是a,a就是c,你在函数B里面对c进行任何操作,同时对a也进行了相应的操作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式