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)还一样么?
在下初学,最好能举例说明,越清楚越好~谢谢!~~ 展开
这个和返回类型有关系么,如果是int a1(int &x,int &y)和int a2(int x,int y)还一样么?
在下初学,最好能举例说明,越清楚越好~谢谢!~~ 展开
展开全部
你好,
函数传值,只是起到一个“传”的作用,在调用函数中修改,只会在调用函数的这个作用域中起作用。
函数传地址,一般通过传指针或传引用。它在调用函数的时候,如果改变了传入地址中的数据,即地址所指向的地址空间。
而通过传值,相当于在内存中拷贝了一份,在调用函数中,只改变了拷贝值所在的地址空间的数据,而不是改变所传入值的地址空间的数据
a1和a2都是运行了,只是a2运行的并没有改变传入的值!
如果需要还不懂,可以再来问我!
函数传值,只是起到一个“传”的作用,在调用函数中修改,只会在调用函数的这个作用域中起作用。
函数传地址,一般通过传指针或传引用。它在调用函数的时候,如果改变了传入地址中的数据,即地址所指向的地址空间。
而通过传值,相当于在内存中拷贝了一份,在调用函数中,只改变了拷贝值所在的地址空间的数据,而不是改变所传入值的地址空间的数据
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才变化!
}
展开全部
传值可以说是暂时分配一个新的空间,不会改变原来的值,传引用相当于把变量的地址传过去,会改变原始的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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变;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询