假设有下面这样一个结构体:
struct T {
int x;
int y;
};
则,struct T a = {1, 2};
和 struct T b = a;
,这两种结构体赋值的方式都是可行的,但 struct T c; c = {1, 2};
这种结构体赋值方式是会报错的。stack overflow 上说 {1, 2}
不是一个表达式,因为在 C 语言中,表达式是有类型的,而编译器无法确定 {1, 2}
的类型,它可以是struct T
类型,也可以是int[2]
类型。
当然,有其他方法可以解决这个问题:
1)如果编译器支持 C99 标准,则 c = (struct T) {1, 2}
是可行;
2)如果使用 C++11,则 c = {1, 2}
是原生支持的。
总结起来,有如下结论:
c = {1, 2}; // C 语言和 C++11 之前的编译器不支持该写法
c = (struct T) {1, 2}; // C99 标准支持
c = {1, 2}; // C++11 原生支持
参考资料:
- initializing struct variables after declaration.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)