C++关于函数的传值和传地址传引用的区别?

传值和传地址有什么区别,比如函数开头是voida1(int&x,int&y)和voida2(intx,inty),main函数里用a1(x,y)和a2(x,y),为什么只... 传值和传地址有什么区别,比如函数开头是void a1(int &x,int &y)和void a2(int x,int y),main函数里用a1(x,y)和a2(x, y),为什么只运行a1,不运行a2?
这个和返回类型有关系么,如果是int a1(int &x,int &y)和int a2(int x,int y)还一样么?

在下初学,最好能举例说明,越清楚越好~谢谢!~~
展开
 我来答
865851458
2012-08-06
知道答主
回答量:37
采纳率:0%
帮助的人:15.7万
展开全部
你好,
函数传值,只是起到一个“传”的作用,在调用函数中修改,只会在调用函数的这个作用域中起作用。

函数传地址,一般通过传指针或传引用。它在调用函数的时候,如果改变了传入地址中的数据,即地址所指向的地址空间。

而通过传值,相当于在内存中拷贝了一份,在调用函数中,只改变了拷贝值所在的地址空间的数据,而不是改变所传入值的地址空间的数据

a1和a2都是运行了,只是a2运行的并没有改变传入的值!

如果需要还不懂,可以再来问我!
追问
也就是说,比如最后有一个cout<<y,那输出的是a1,但是如果没有a1的话,输出的就是a2,为什么呢?如果main里a2后面还有个a3(x,y),哪a3是根据a2运算之后的数算还是根据main最开始定义的数算呢?
追答
不好意思,昨天没有上了。我给你举个列子吧!

void a1(int* x,int* y)
{
*x = *x+1;
*y = *y+1;

}
void a2(int x, int y)
{
x = x+2;
y = y+2;

}

int main()
{
int x = 3,y = 4;
a1(&x,&y); //这时是通过传地址,调用之后 x =4,y = 5
a2(x,y); //这是传值,这并没有对main中的x,y值进行修改,还是x=4,y=5
//如果还有a3,并调用了a1时,a3传的是a1处理后的x,y,跟a2无关
//如果有a3,并没有调用a1时,a3传的是开始定义的数据,跟a2无关
//也就是说a2的调用与不调用,
//并不会对main中的x,y值产生影响,而只是在a2这个函数中x,y才变化!
}
captain璇
2012-08-07
知道答主
回答量:2
采纳率:0%
帮助的人:3161
展开全部
传值可以说是暂时分配一个新的空间,不会改变原来的值,传引用相当于把变量的地址传过去,会改变原始的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
home我是吸血鬼
2015-03-28 · TA获得超过101个赞
知道答主
回答量:156
采纳率:0%
帮助的人:75.9万
展开全部
#include<stdio.h>

void plus(int p, int *q){

    p++;
    (*q)++;
}

main(){

    int a = 1;
    int b = 1;
    
    plus(a, &b); // 把a的值和b的地址传给plus函数
    
    printf("a=%d, b=%d\n", a, b); // 经过plus处理,得到结果,a不变,b变;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式