找回密码
 注册
搜索
查看: 1749|回复: 5

[讨论] C语言基本问题数组初始化【keypad配置】

[复制链接]
发表于 2012-3-7 18:07:57 | 显示全部楼层 |阅读模式
按键配置为何都是这样的:

#define KEYMAP_INDEX(row, col) ((row)*ARRAY_SIZE(halibut_col_gpios) + (col))
static const unsigned short halibut_keymap[ARRAY_SIZE(halibut_col_gpios) * ARRAY_SIZE(halibut_row_gpios)] = {

[KEYMAP_INDEX(0, 0)] = KEY_VOLUMEDOWN,

[KEYMAP_INDEX(0, 2)] = KEY_VOLUMEUP,

}

数组可以这样赋值?
表达式
[KEYMAP_INDEX(0, 0)] = KEY_VOLUMEDOWN,如果KEY_VOLUMEDOWN=0x144,这个其实就
是0=0x144,
于是上面的等价与
halibut_keymap[]
{
0=0x144,
0=0x145,
}
这是什么意思?搞不懂了。。。。 也无法从halibut_keymap中取得gpio?
发表于 2012-3-14 15:54:41 | 显示全部楼层
以下是引用Justinyue在2012-3-7 18:07:57的发言:

数组可以这样赋值?
表达式
[KEYMAP_INDEX(0, 0)] = KEY_VOLUMEDOWN,如果KEY_VOLUMEDOWN=0x144,这个其实就
是0=0x144,
于是上面的等价与
halibut_keymap[]
{
0=0x144,
0=0x145,
}
这是什么意思?搞不懂了。。。。 也无法从halibut_keymap中取得gpio?


我的理解:static const unsigned short halibut_keymap[ARRAY_SIZE(halibut_col_gpios) * ARRAY_SIZE(halibut_row_gpios)] = {

[KEYMAP_INDEX(0, 0)] = KEY_VOLUMEDOWN,

[KEYMAP_INDEX(0, 2)] = KEY_VOLUMEUP,

}
等价于下面:
static const unsigned short halibut_keymap[ARRAY_SIZE(halibut_col_gpios) * ARRAY_SIZE(halibut_row_gpios)] = {
[0] = KEY_VOLUMEDOWN,
[2] = KEY_VOLUMEUP,
},
即:halibut_keymap[0] = KEY_VOLUMEDOWN; halibut_keymap[2] = KEY_VOLUMEUP;

数组部分元素初始化的一种方法。
点评回复

使用道具 举报

 楼主| 发表于 2012-3-8 12:57:22 | 显示全部楼层
太菜了吗,请高手解答一下~
点评回复

使用道具 举报

发表于 2012-8-13 17:06:22 | 显示全部楼层
给力 [em05]
点评回复

使用道具 举报

发表于 2012-10-27 15:39:29 | 显示全部楼层
sh365 前面一般理解正确,后面一般不是那样的,后面一般应该标示的是数组里面的两个元素是等式。而不是按键变量
点评回复

使用道具 举报

发表于 2012-10-16 09:33:09 | 显示全部楼层
数组索引[KEYMAP_INDEX(0, 0)]的扩展 主要是 编译器能对c的扩展的支持就行。

最简单的理解办法就是手动把宏扩展开来,仔细看。

halibut_keymap[KEYMAP_INDEX(0, 2)] =
halibut_keymap[(0*ARRAY_SIZE(halibut_col_gpios) + 2)] =
halibut_keymap[2]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-5-4 21:46 , Processed in 0.045058 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表