首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

多维数组与指针的有关问题

2012-11-03 
多维数组与指针的问题二维数组a[i][j] 可以表示为*(*(a+i)+j)不明白为什么,求大神帮助!!!小弟感激不尽[解

多维数组与指针的问题
二维数组a[i][j] 可以表示为*(*(a+i)+j) 不明白为什么,求大神帮助!!!小弟感激不尽

[解决办法]
*(a+i)等价于a[i],是一个指针,可以理解为指向第i行。
然后同理,*(*(a+i)+j),表示在指向第i行的基础之上,指向了第列。
[解决办法]
几个变换记一下
1.数组名可以理解为 "&数组名[0]"的简略----反之前面的&和后面的[0]同时省略或同时加上
2.&数组名[i]+j理解从数组名[i]处向后数j个元素的位置----即&数组名[i+j]
3.*&可以相互抵销----“*&变量”理解先为取变量的地址再按该地址访问,即该变量

应用
*(*(a+i)+j)====》*(*(&a[0]+i)+j)====》*(*(&a[0+i])+j)
====》*(*(&a[i])+j)====》*(*&a[i]+j)====》*(a[i]+j)
====》*(&a[i][0]+j)====》*(&a[i][j])====》*&a[i][j]
====》a[i][j]
不要怕繁琐,有用的,注意括号中只有一项时再丢弃
纸上推演几次,对理解指针与数组的关系有帮助
[解决办法]
对于二维数组a,有四层语法概念:
&a----整个数组a的地址----很少用
&a[i]----数组a第i行的地址
&a[i][j]----数组a第i行第j列(元素)的地址
a[i][j]----即元素

直观判断:
前面的几个*,就可以变换为后面几个[]----判断是上面所述的哪一层概念

热点排行
Bad Request.