C++对象在函数参数中传递是属于指针传递还是值传递

我以前的理解是指针传递 把对象的首地址传过去但是后来听说在对象传递时在栈中产生一个对象副本 如果是这样的话是属于指针传递还是值传递(但是如果函数中改变对象的成员变量那么原对象的成员变量也是变化的 ) 谢谢

1.没有明确声明为指针或者引用,都是值传递,会调用对象重载的=,创建新的对象。

2.当指定为指针类型的时候为传递的是指针(地址),指定参数类型为引用的时候,传递的也是地址。

示例:

#include<stdio.h>

struct AA
{
int a;
char b;
};

void ch(AA aa)//传递对象
{
aa.a=2;
}
void change(AA &aa)//传递引用
{
 aa.a=2;
}
void main()
{
AA a;
a.a=1;
a.b='b';
ch(a);//值传递不改变a.a的值
printf("%d\n",a.a);
change(a);//指针传递改变a.a的值
printf("%d\n",a.a);
}

结果:

1
2

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-11
其实,除非函数参数声明为引用:void func(int & num),其他的都是值传递.怎么讲呢?
值传递就是把值复制一遍到函数体里面用.int就复制int,类就复制类(有复制构造函数的调复制构造函数,没有的直接复制成员)指针就复制指针..指针是什么?抛开其他的不讲,它也是一堆数字,和int还有点点像,区别在于这堆数字是地址而已.这样虽然我复制了一遍这个地址,但是到函数里面还是同样的地址没变..
也就是说指针传递实际上也是要复制值的,只不过是复制了地址.你把它当数字的话会发现指针它自己的地址是不一样的,也就佐证了指针也是经过值(复制)传递的.
最后点题:是值传递,而且函数里用的是原对象拷贝出来的副本.拷贝的方法是有复制构造函数用复制构造函数,没有就直接复制. 有什么区别?再解释要跑题了.
第2个回答  2010-12-11
没有明确声明为指针或者引用,都是值传递,会调用对象重载的=,创建新的对象。本回答被提问者采纳
第3个回答  2010-12-11
如果将对象作为参数进行传递,当然就是值传递,例如:
#include<stdio.h>

struct AA
{
int a;
char b;
};

void ch(AA aa)
{
aa.a=2;
}

void main()
{
AA a;
a.a=1;
a.b='b';
ch(a);
printf("%d\n",a.a);
}
第4个回答  2010-12-11
C++中函数中的参数肯定是值传递的,除非你申明了指针传递或者引用传递
相似回答