当结构体内没有指针类型的变量(包括数组变量)都是值传递,但当结构体内有指针变量时,赋值操作会把指针变量中的地址直接传递过去,如下面例子所示,a,b中s变量发生的是地址与地址的交换,当b中引用s中的地址时,其实引用的是与a中s相同的地址。解决办法是进行深度复制,给b中s变量也分配一个地址,然后将a中s所指的值逐个赋值过去(strcpy也可以)。
typedef struct
{
int i;
int j;
char* s;
}Test;
int main()
{
Test a;
Test b;
a.i = 1;
a.j = 2;
a.s = (char*)malloc(10 * sizeof(char));
a.s[0] = 'A';
a.s[1] = 'B';
a.s[2] = '\0';
b = a;
b.i = 0;
b.s[0] = 'C';
printf("a:%d %d %s\n", a.i, a.j, a.s);
printf("b:%d %d %s", b.i, b.j, b.s);
}