任何人都可以解释以下代码的输出:
int main() {
struct student {
char *nume;
char an[5];
} a, b;
a.nume = (char*)malloc(20);
strcpy(a.nume, "Alex Popescu");
strcpy(a.an, "1996");
printf("%s %s\n", a.nume, a.an);
b = a;
strcpy(b.nume, "Emil Ionescu");
strcpy(b.an, "1997");
printf("%s %s\n", b.nume, b.an);
struct student *pa = &a;
printf("%s %s\n", pa->nume, (*pa).an);
free(a.nume);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Alex Popescu 1996
Emil Ionescu 1997
Emil Ionescu 1996
Run Code Online (Sandbox Code Playgroud)
怎么b = a;
办?被b
指向相同的地址a
?当你改变b.name
时Emil Ionescu
,也a
正在改变它的价值?
为什么只有名称改变但是年份仍然存在1996
?
它是结构的"浅层"副本.
每个成员都a
被复制到每个成员中b
.由于指针指向某个内存,因此在这种情况下,两个结构的两个指针都将指向相同的内存.如果更改了内存,则两个指针都会看到该更改.
但是数组包含它自己的内存,因此在一个结构中更改数组只会影响该结构.
我觉得你很困惑,因为你使用了一个结构.没有什么特别之处,只是碰巧拿着一个指针和一个数组.您的代码将是相同的,如果您使用两个指针和两个数组并手动复制它们而不是两个结构.你应该试试.