指向二维数组的指针——讨厌的行指针和列指针反思
文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在十万人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍。
学指针的时候行指针和列指针就是难点,还记得老师当时就说这几乎是C语言最难理解的地方了(当然只是基础语法,我们还没讨论复杂功能实现),下面介绍一下行指针列指针方面的基础基础基础易混易混易混的地方,毕竟基础决定层建筑!适合小白,以及对指针一直有困惑的人,希望可以解决你的困惑,欢迎指正。
定义行指针的方法:
T array[4][5];T (*ptr)[5];//5为该二维数组列的个数
ptr=array;//若位列指针则这样定义: T *ptr=array[0];
*(ptr+Row)+Col 为列地址,且为该数组第Row行,第Col列的地址
*(*(ptr+Row)+Col) 为具体的值
下面对行地址和列地址的表示方法进行总结如下:
iArr 为二维数组名
行地址:
iArr iArr+i &iArr[i] &*(iArr+i)
列地址
*iArr *(iArr+i) iArr[i]
通过以上总结相信大家可以发现列地址和行地址之间存在着以下关系即行地址进行一次*运算即为列地址,同样的列地址进行一次&预算即为行地址
加油吧,程序员!