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


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

C++/VC 程序开发 异常处理

来自天堂的手 12 years, 9 months ago


(a+i)等价于a[i],是一个指针,可以理解为指向第i行。
然后同理,
(*(a+i)+j),表示在指向第i行的基础之上,指向了第列。

天然呆小米酒 answered 12 years, 9 months ago


对于二维数组a,有四层语法概念:
&a----整个数组a的地址----很少用
&a[i]----数组a第i行的地址
&a[i][j]----数组a第i行第j列(元素)的地址
a[i][j]----即元素

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

Kengo answered 12 years, 9 months ago


几个变换记一下
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]
不要怕繁琐,有用的,注意括号中只有一项时再丢弃
纸上推演几次,对理解指针与数组的关系有帮助

wakaka answered 12 years, 9 months ago

Your Answer