#include<stdio.h>
struct s {
char *a1;
int a;
};
int main(){
struct s p={"asdv",11};
struct s p1=p;
p1.a1="vshaj";
printf("%d %s",p.a,p.a1);
}
在上面的程序中 p1.a1 和 p.a1 是否指向相同的内存地址?
1) 结构 p1 是p的副本
2)但是 - 因为 a1 是一个指针,所以复制的指针都指向同一个内存。直到您将 p1.a1 重新分配给“vshaj”的地址。
3)永远不要在真实代码中做这样的事情;)
是的,他们会这样做,直到您重新分配p1.a1
,然后他们当然不会。您可以将它们打印出来以证明这一点。
示例代码:
#include <stdio.h>
struct s
{
char *a1;
int a;
};
int main(void)
{
struct s p = { "asdv", 11 };
struct s p1 = p;
printf("They're the same: %p %p\n", p.a1, p1.a1);
p1.a1 = "vshaj";
printf("%d %s\n",p.a,p.a1);
printf("They're different: %p %p\n", p.a1, p1.a1);
return 0;
}
示例运行:
$ make example
cc example.c -o example
$ ./example
They're the same: 0x10e258f2a 0x10e258f2a
11 asdv
They're different: 0x10e258f2a 0x10e258f48