现在的位置: 首页 > 综合 > 正文

gcc 二维数组赋值

2013年07月23日 ⁄ 综合 ⁄ 共 1577字 ⁄ 字号 评论关闭

 前几天分析udev实现自动在/dev下创建节点时,看到内核源码中定义actions的数组形式,觉得很奇怪。
static const char *kobject_actions[] = {
        [KOBJ_ADD] =            "add",
        [KOBJ_REMOVE] =         "remove",
        [KOBJ_CHANGE] =         "change",
        [KOBJ_MOVE] =           "move",
        [KOBJ_ONLINE] =         "online",
        [KOBJ_OFFLINE] =        "offline",
};

写了个用户态程序测试了一下,
#include <stdio.h>
#include <stdlib.h>
enum kobject_action {
        KOBJ_ADD,
        KOBJ_REMOVE,
        KOBJ_CHANGE,
        KOBJ_MOVE,
        KOBJ_ONLINE,
        KOBJ_OFFLINE,
        KOBJ_MAX
};
static const char *kobject_actions[] = {
        [KOBJ_ADD] =            "add",
        [KOBJ_REMOVE] =         "remove",
        [KOBJ_CHANGE] =         "change",
        [KOBJ_MOVE] =           "move",
        [KOBJ_ONLINE] =         "online",
        [KOBJ_OFFLINE] =        "offline",
};

static const char *kobject_acti[] = {
        [0] =            "add",
        [1] =         "remove",
        [2] =         "change",
        [3] =           "move",
        [4] =         "online",
        [5] =        "offline",
};
int main()
{
        int i;
        for(i=0;i<6;i++)
        {
                printf("kobject_actions[%d]=%s/n",i,kobject_actions[i]);
                printf("kobject_actions[%d]=%s/n",i,kobject_acti[i]);

        }
        return 0;
}

wuting@wuting-desktop:test$ gcc enum.c
wuting@wuting-desktop:test$ ./a.out
kobject_actions[0]=add
kobject_actions[0]=add
kobject_actions[1]=remove
kobject_actions[1]=remove
kobject_actions[2]=change
kobject_actions[2]=change
kobject_actions[3]=move
kobject_actions[3]=move
kobject_actions[4]=online
kobject_actions[4]=online
kobject_actions[5]=offline
kobject_actions[5]=offline

从打印的信息可以看出,它是对二维数组赋值的不同形式。

抱歉!评论已关闭.