【发布时间】:2016-07-25 07:00:27
【问题描述】:
我使用以下两行代码:
enum bus_sigs { REG0, REGA, REGB, REGC, REGD };
short bus[5];
目的是用枚举名称索引短裤数组。例如,我使用:bus[REGA]。
我的行为很奇怪:如果我使用bus[REGC],我会得到奇怪的值,就好像我正在从数组内存范围之外获取数据一样。如果我将第二行更新为:
short bus[10];
行为再次符合预期。但这对我来说毫无意义。我只分配给 bus 数组中的 5 个成员。
我没有得到什么?
【问题讨论】:
-
总线是全局数组吗?
-
我没有得到确切的问题。但是让我解释一下,默认情况下
enum第一个成员的值是0,其余成员的值增加1。C也不会检查数组是否越界。 -
确保您确实将值放入您稍后要获取的总线元素中。
-
@Checkmate 我的想法,除非数组是全局的,然后所有数组成员都初始化为 0
-
枚举值由 C 标准指定从
0开始并以1递增,您确定您正在直接访问bus,而不是指向某个更大类型的指针吗? IE。long *b = (long*)bus; b[4]显然是个问题。