二维数组的行指针与列指针
笔记来源:懒猫老师-C语言-用指针访问二维数组(指针与二维数组)
声明:本文笔记来自bili@懒猫老师,仅供学习参考
回顾一维数组
int a[3];//其中a或a[0]是数组首地址
//a+1指向第二个元素的地址,解引用后得到元素*(a+1)
二维数组
int a[3][4];//其中a[i]为一维数组名,a[i][j]为数组名+下标,第i个一维数组中第j个元素
//a[0]+1指向第二个元素(这个元素是第二个一维数组)
a+i //为行指针,其内容为一维数组指针
*(a+i) //获得一维数组指针(列指针)
*(a+i)+j //获得一维数组中指向某一个具体元素的指针(列指针)
*(*(a+i)+j) //获得一维数组中某一个具体元素(列指针所指元素)
行指针(二维数组中指向“一维数组”首元素的指针)
a是指向包含4个元素的一维整型数组的行指针,步长为16个字节(一个整型元素4个字节,一个一维整型数组4个整型元素),a+1直接移动16个字节,这也意味着行指针无法直接访问二维数组的每个元素,要访问的话需要步长是4字节。
列指针(二维数组中指向某个具体数组元素的指针称为列指针)
a[0]为第一个一维数组的数组名,也是其首地址,步长为4个字节(一个整型元素4个字节)
a[0]+1等价于&a[0][1]
行指针与列指针关系
访问二维数组元素的三种方式
(1)下标法:a[i][j]
(2)列指针访问:*(a[i]+j)
(3)行指针转为列指针访问:* (*(a+i)+j)【其中*(a+i)与a[i]等价】