#include <iostream.h>
struct structA
{
int imember;
char *cmember;
};
int main (int argc, char* argv[])
{
structA instant1, instant2;
char c ='a';
instant1.imember = 1;
instant1.cmember = &c;
instant2 = instant1;
cout <<*(instant1.cmember) <<endl;
*(instant2.cmember) = 'b';
cout <<*(instant1.cmember) <<endl;
return 0;
}
结果:a
b
原因在于instant2 = instant1赋值语句采用的是变量逐个拷贝,这使得他们的cmember指向了同一片内存。
在C语言中,当结构体中存在指针成员时,一定要注意在采用赋值语句时是否将2个实例中的指针指向了同一内存地址 。
C++中,当结构体中存在指针成员时,我们需要重写struct的拷贝构造函数,并进行‘=’操作符的重载。