为什么这在 C 中是非法的?将 p 重新初始化到不同的位置有什么问题?通过单独更改字段值可以达到相同的效果,所以我不明白为什么不能在 p = {1, 2} 的情况下一步完成。
struct posn {
int x;
int y;
};
int main() {
struct posn p = {3, 4};
p = {1, 2}; //Causes error
// must do p.x = 1; p.y = 2;
return 0;
}
最佳答案
这就是指定语言的方式。
为了与 C 的一般设计保持一致,为了允许 p = {1, 2}
,{1, 2}
必须是一个表达式。但是是什么类型的呢?它可以是 int[2]
,或者 struct { int a;短裤; }
,或者很多其他的东西。
在 C99 中,可以使用复合文字,它明确提及类型(从而解决了如何确定类型的问题),括号中的类型名称后跟 {}
括号:
p = (struct posn){1, 2};
关于c - 为什么我们不能在 C 中多次初始化结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797055/