C语言结构体赋值的小问题

C语言结构体赋值的小问题,第1张

  假设有下面这样一个结构体

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 原生支持

 
 
参考资料:

  1. initializing struct variables after declaration.

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/727460.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存