在C语言中[foo] = bar是什么意思?

  • 本文关键字:是什么 bar 语言 foo
  • 更新时间 :
  • 英文 :


我只是在第一个终端模拟器中阅读一些代码,遇到了这样的语法:

static void (*handler[LASTEvent])(XEvent *) = {
    [KeyPress] = kpress,
    [ClientMessage] = cmessage,
    /* Removed some lines for brevity ... */
};

我从来没有在C中见过这种语法,我甚至不知道该用谷歌搜索什么。我对它的作用有一个粗略的概念(将处理程序定义为函数指针数组),但我想更好地理解这种语法。它似乎至少在C99中是有效的,但我正在寻找一些更多的细节,为什么这是正确的,它是如何工作的,也许是指向C标准的指针,在那里定义了这种语法。

这是用枚举索引初始化一个函数指针数组。看到这里。

如下面的注释中提到的,

使用指定初始化式。

这个简短的例子应该展示如何使用它。

enum indexes {ZERO, ONE, TWO, FOUR=4};
int array[5] = {[FOUR]=1, [TWO]=9};
for(int i = 0; i < 5; i++)
    printf("%d, ", array[i]);

打印出

0, 0, 9, 0, 1,

最新更新