论坛元老
 
- 积分
- 3571
- 金钱
- 3571
- 注册时间
- 2014-12-2
- 在线时间
- 365 小时
|
发表于 2016-3-9 16:26:21
|
显示全部楼层
造诣不高。
先上一段开胃代码:
static WORD16 kkk[32][32];
kkk[j] [m]= (WORD16)bbb;
这样就非常明白了,kkk是一个32行32列的数组,
往第j行,第m列赋值为bbb
-----------------分割线----------------------------
再看原代码:
static WORD16 (*aaa)[32][32];
(*aaa)[j] [m]= (WORD16)bbb;
注意骚色内容,是上面蓝色的直接粗暴替换,没错,就是替换。
aaa是一个指针,指向kkk类型,即:
aaa是一个指向32行32列的数组的指针。
aaa如果不初始化的话,是一个野指针,正确的初始化可以写作aaa = &kkk;
PS,(*aaa)[j] [m]= (WORD16)bbb; 无条件等价于aaa[0][j] [m]= (WORD16)bbb;
测试代码:
[mw_shl_code=c,true]
# include "stdio.h"
static int kkk[32][32];
static int (*aaa)[32][32];
int main(void)
{
kkk[5][9] = 0xAA55;
printf("val = 0x%04X\n", kkk[5][9]);
aaa = &kkk;
(*aaa)[5][9] = 0x5555;
printf("val = 0x%04X\n", kkk[5][9]);
aaa[0][5][9] = 0xAAAA;
printf("val = 0x%04X\n", kkk[5][9]);
return 0;
}
[/mw_shl_code]
dev-cpp编译运行结果:
------不正经的分割线------
|
|