blu*_*ote 0 c struct assignment-operator
对于标量值,赋值运算符似乎将右侧的值复制到左侧。这对复合数据类型有何作用?例如,如果我有一个嵌套结构
struct inner {
int b;
};
struct outer {
struct inner a;
};
int main() {
struct outer s1 = { .a = {.b=1}};
struct outer s2 = s1;
}
Run Code Online (Sandbox Code Playgroud)
通过实验似乎确实如此,但是有人可以指出行为的规范吗?
没有“递归”;它复制值的所有(值)位。指针当然不会被神奇地跟随,赋值运算符不知道如何复制指向的数据。
你可以想到
a = b;
Run Code Online (Sandbox Code Playgroud)
作为简写
memcpy(&a, &b, sizeof a);
Run Code Online (Sandbox Code Playgroud)
这sizeof当然是误导,因为我们知道双方的类型相同,但我认为没有__typeof__帮助。
C11 规范草案说(在 6.5.16.1 简单赋值,第 2 段):
在简单赋值 (
=) 中,右操作数的值被转换为赋值表达式的类型,并替换左操作数指定的对象中存储的值。
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |