1
4

3 回答 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 回答