关于数组的新理解

来源:互联网 发布:淘宝互刷代付骗局 编辑:程序博客网 时间:2024/06/05 14:48

今天看串口的初始化代码,发现了一个多维数组的问题,居然花了好长时间才看懂,只能说内核代码看起来太伤脑筋了啊

先贴代码

static struct plat_serial8250_port uart8250_data[][3] = {
        [MACH_LOONGSON_UNKNOWN]         {},
        [MACH_LEMOTE_FL2E]              {PORT(4, 1843200), {} },
        [MACH_LEMOTE_FL2F]              {PORT(3, 1843200), {} },
        [MACH_LEMOTE_ML2F7]             {PORT_M(3, 3686400), {} },
        [MACH_LEMOTE_YL2F89]            {PORT_M(3, 3686400), {} },
        [MACH_DEXXON_GDIUM2F10]         {PORT_M(3, 3686400), {} },
        [MACH_LEMOTE_NAS]               {PORT_M(3, 3686400), {} },
        [MACH_LEMOTE_LL2F]              {PORT(3, 1843200), {} },
        [MACH_LOONGSON_LS3EVA]          {PORT_M(2, 33000000), PORT_M(2, 33000000), {} },
        [MACH_LOONGSON_END]             {},
};

下面是这样呢调用的

iotype = uart8250_data[mips_machtype][0].iotype;

其中mips_matchtype表示的是机器的架构,和上面数组中的架构对应

但是这其中语法是怎样的呢?以前完全没见过这样定义数组的啊

不急,我写了个小程序,如下

#include <stdio.h>


int main(){
        int a[][2] = {
        [0]     {1,2},
        [1]     {3,4},
        [2]     {5,6},
        };
        printf("a[1][1] = %d\n",a[1][1]);
        return 0;
}

这个代码运行下,基本就知道上面程序是怎么一个原理了。输出结果是4


只是这种写法以前我c语言了解地少,真没见过,以后再也不敢说自己c语言学的好了


那么返回回来,内核中这样定义串口端口的结果体意义何在呢?

就是为了定义不同设备的不同串口的port的信息,后面的uart8250_data[][3]表示最多打开4个串口


0 0
原创粉丝点击