问问题
3957 次
3 回答
3
这是C99 数组初始化语法(又名“指定初始化程序”)。它可以让您混合常规值,例如
pde_t entry_pgdir[NPDENTRIES] = {val1, val2}
与[ind1] = val1, [ind2] = val2
语法。其语义是方括号中的值被解释为索引,后面的值=
被解释为要存储在相应索引处的值。
剩余的条目被清零。如果将常规值放在索引值之后,则编号继续在index+1
.
当数据有间隙时,这种语法很方便,例如
int logval[] = {
[1<<0] = 1
, [1<<1] = 2
, [1<<2] = 3
, [1<<3] = 4
...
};
这比普通的等价物更容易阅读:
int logval[] = {0, 1, 2, 0, 3, 0, 0, 0, 4, ...}
于 2017-10-07T23:46:08.100 回答
2
这是什么意思?[0] = 某事?
它是一个指定的初始化器。一个 C99 构造,允许您指定将使用smth
. 因此,不必依赖初始值设定项的位置来隐式匹配数组元素的位置。相反,初始化是明确的(IMO 更好)。
于 2017-10-07T23:45:57.943 回答
1
它被称为“指定初始化程序”。这意味着以下初始化程序用于数组的第一个元素(索引 0)。在这种情况下,它是多余的,因为第一个初始化程序无论如何都会用于第一个元素。它在这里提供与第二个初始化程序的并行性,它具有 [KERNBASE>>PDXSHIFT]
作为指示符。
初始化器作为一个整体为数组元素中的 2 个元素提供了一个初始值。数组的其余部分初始化为 0。
于 2017-10-07T23:50:41.027 回答