二维数组初始化的问题.

光棍节圣人 2013-05-06 11:58:22
代码里看到类似下面二维数组声明,怎么理解呢?

state_id transition_table[STATE_MAX][EVENT_MAX] =
{
[STATE_1] = {
[EVENT_1]= STATE_9,
},

[STATE_2] = {
[EVENT_8] = STATE_9,
[EVENT_2] = STATE_1,
[EVENT_9] = STATE_10,
},
。。。
}

typedef enum{
STATE_INVALID = 0,
STATE_1,
STATE_2,
STATE_4,
STATE_5,
STATE_6,
STATE_7,
STATE_8,
STATE_9,
STATE_10,
STATE_MAX /* This must be the last entry. Not valid as state */
} state_id;

typedef enum{
EVENT_INVALID,
EVENT_1,
EVENT_2,
EVENT_3,
EVENT_4,
EVENT_5,
EVENT_6,
EVENT_7,
EVENT_8,
EVENT_MAX
} sm_event_id;
...全文
247 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天御剑流 2013-05-09
  • 打赏
  • 举报
回复
引用 9 楼 cooldex 的回复:
找到答案了, 感谢supermegaboy http://cqujsjcyj.iteye.com/blog/646644   11、指定的初始化符   C99中,该特性对经常使用稀疏数组的程序员十分有用。指定的初始化符通常有两种用法:用于数组,以及用于结构和联合。用于数组的格式: = vol; 其中,index表示数组的下标,vol表示本数组元素的初始化值。   例如: int x[10] = {[0] = 10, [5] = 30}; 其中只有x[0]和x[5]得到了初始化。用于结构或联合的格式如下:   member-name(成员名称)   对结构进行指定的初始化时,允许采用简单的方法对结构中的指定成员进行初始化。   例如: struct example{ int k, m, n; } object = {m = 10,n = 200};   其中,没有初始化k。对结构成员进行初始化的顺序没有限制。 所以我上面的二维数组初始化的意思是: [STATE_1] = { [EVENT_1]= STATE_9, }, 是transition_table[1][1] = 9 [STATE_2] = { [EVENT_8] = STATE_9, [EVENT_2] = STATE_1, [EVENT_9] = STATE_10, }, 是: transition_table[2][8] = 9 transition_table[2][2] = 1 transition_table[2][9] = 10
对。只是STATE_9是STATE_9,不要把它说成9。
赵4老师 2013-05-09
  • 打赏
  • 举报
回复
“语法糖”而已!
ForestDB 2013-05-09
  • 打赏
  • 举报
回复
新的标准中的东西。
yang3768211 2013-05-09
  • 打赏
  • 举报
回复
这么神奇。实际编程会有这样的情况吗?
光棍节圣人 2013-05-09
  • 打赏
  • 举报
回复
找到答案了, 感谢supermegaboy http://cqujsjcyj.iteye.com/blog/646644   11、指定的初始化符   C99中,该特性对经常使用稀疏数组的程序员十分有用。指定的初始化符通常有两种用法:用于数组,以及用于结构和联合。用于数组的格式: = vol; 其中,index表示数组的下标,vol表示本数组元素的初始化值。   例如: int x[10] = {[0] = 10, [5] = 30}; 其中只有x[0]和x[5]得到了初始化。用于结构或联合的格式如下:   member-name(成员名称)   对结构进行指定的初始化时,允许采用简单的方法对结构中的指定成员进行初始化。   例如: struct example{ int k, m, n; } object = {m = 10,n = 200};   其中,没有初始化k。对结构成员进行初始化的顺序没有限制。 所以我上面的二维数组初始化的意思是: [STATE_1] = { [EVENT_1]= STATE_9, }, 是transition_table[1][1] = 9 [STATE_2] = { [EVENT_8] = STATE_9, [EVENT_2] = STATE_1, [EVENT_9] = STATE_10, }, 是: transition_table[2][8] = 9 transition_table[2][2] = 1 transition_table[2][9] = 10
光棍节圣人 2013-05-09
  • 打赏
  • 举报
回复
引用 6 楼 supermegaboy 的回复:
[quote=引用 1 楼 cooldex 的回复:] 是不是这样理解呢: STATE_1 状态下收到EVENT_1 则迁移到 STATE_9??
这是C99的指定初始化。这个数组的作用大致如你所理解的,但是迁移这个词不准确,应该是映射或者查询。[/quote] 感谢大虾指点. 这个初始化怎么理解,一般二维初始化都是类似{{0,0},{1,1}}这样的形式.
疯狂的红豆 2013-05-08
  • 打赏
  • 举报
回复
VS2010 竟然不识别这些语法,,,好吧
飞天御剑流 2013-05-08
  • 打赏
  • 举报
回复
引用 1 楼 cooldex 的回复:
是不是这样理解呢: STATE_1 状态下收到EVENT_1 则迁移到 STATE_9??
这是C99的指定初始化。这个数组的作用大致如你所理解的,但是迁移这个词不准确,应该是映射或者查询。
光棍节圣人 2013-05-08
  • 打赏
  • 举报
回复
再顶,真的没人知道吗?
光棍节圣人 2013-05-07
  • 打赏
  • 举报
回复
是不是这样理解呢: STATE_1 状态下收到EVENT_1 则迁移到 STATE_9??
就是那个党伟 2013-05-07
  • 打赏
  • 举报
回复
赵4老师 2013-05-07
  • 打赏
  • 举报
回复
VS IDE中,在不明白的符号上点鼠标右键,选转到定义。
光棍节圣人 2013-05-07
  • 打赏
  • 举报
回复
没有高手解惑吗....

69,369

社区成员

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

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