结构体变量名被赋值时,不是赋值的地址,而是执行对整个结构体内容的复制(值拷贝)
直接赋值是成员级复制
当使用 s2 = s1;
形式的赋值时(其中 s1
和 s2
是同类型结构体变量),系统会逐成员复制 s1
中的所有数据到 s2
,而非传递地址。赋值后两个变量拥有相同内容,但占据独立的内存空间。
如下示例:
struct Student s1 = {"Tom", 20};
struct Student s2;
s2 = s1; // 复制 s1 的所有成员值到 s2
printf("s1 addr=%p, s2 addr=%p", &s1, &s2); // 输出不同地址
- 结构体变量名:代表整个数据实体,赋值操作触发内存拷贝。
- 指针变量:存储地址,赋值如
p = &s1;
仅传递地址,不复制数据