奇怪的结构体初始化

rszqy 2014-09-19 11:27:53
小弟我最近看到一段奇怪的C代码,它的结构体可以类似这样初始化
typedef struct{ int a; int b;}ab;
ab test[2] =
{
[0] = {1,2},
[1] = {3,4},
};
自然这样初始化一般是不会编译通过的,但在此工程中却可以编译通过,我试过把[1] = {3,4}改成[2] = {3,4}
还会提示“subscript out of range”错误,求大神解释
...全文
158 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa5566f4 2014-09-21
  • 打赏
  • 举报
回复
陣列從0開始喔 樓主
Intel0011 2014-09-20
  • 打赏
  • 举报
回复
typedef struct{ int a; int b;}ab; ab test[2] = { [0] = {1,2}, [1] = {3,4}, }; 这种语法C89标准不支持,C99支持
引用 1 楼 brookmill 的回复:
用gcc4.8.2编译通过。 一般写法ab test[2] = { {1,2}, {3,4}, }; 看不出来加上[0]和[1]有多大好处
加上[0]和[1]可以在初始化时改变顺序,如 typedef struct{ int a; int b;}ab; ab test[2] = { [0] = {1,2}, [1] = {3,4}, }; 等价 typedef struct{ int a; int b;}ab; ab test[2] = { [1] = {3,4}, [0] = {1,2}, }; 不加, typedef struct{ int a; int b;}ab; ab test[2] = { {1,2}, {3,4}, }; 显然不等价 typedef struct{ int a; int b;}ab; ab test[2] = { {3,4}, {1,2}, };
卞爱华 2014-09-20
  • 打赏
  • 举报
回复
C99中的designated initilization,详情参考我的博客(初始化部分) http://www.cnblogs.com/edward-bian/p/3870683.html
饭凉凉 2014-09-20
  • 打赏
  • 举报
回复
把[1] = {3,4}改成[2] = {3,4} test只有两个元素。改成2溢出了吧。
brookmill 2014-09-19
  • 打赏
  • 举报
回复
用gcc4.8.2编译通过。 一般写法ab test[2] = { {1,2}, {3,4}, }; 看不出来加上[0]和[1]有多大好处

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧