C语言笔记:指向多维数组的指针(数组指针&指针数组)

笔记创建时间:2018/10/16
声明一个指针变量pz指向一个二维数组(例如:int zippo[4][2];)
应将该指针指向一个内含另两个int类型值的一维数组
如下声明:
int(*pt)[2];
这就是数组指针
如果去掉两侧的括号:
int*pax[2];
由于[]优先级高,先于pax组成一个内含两个元素的数组。然后*表示pax数组内含两个指针。最后,int表示pax数组中的指针都指向int类型的值。
因此,这行代码声明了两个指向int的指针——指针数组
#include<stdio.h>
int main()
{
       int zippo[3][4] = {
              {1,2,3,4},
              {5,6,7,8},
              {9,10,11,12},
       };
       int(*pointer)[4]=zippo;
       printf("zippo[1][2]=%d\n", pointer[1][2]);
       printf("zippo[1][2]=%d\n", *(*(zippo + 1) + 2));
       printf("zippo[1][2]=%d", zippo[1][2]);
       
       return 0;
}
虽然pointer是一个指针,不是数组名,但是也可以用pointer[1][2]这样的写法。
可以用数组表示法或指针表示法来表示一个数组元素,既可以用数组名,也可以用指针名。
zippo[m][n] == *(*(zippo + m) + n);
pointer[m][n] == *(*(pointer + m) + n);
以第二行pointer指针为例,分析指针表示法:
  1. pointer代表二维数组首元素的地址(首元素为一个含有n个元素元素
  2. 将pointer+m 得到第m+1个元素(一个含有n个元素元素)的地址
  3. 在pointer+m前+”*”可以得到第m+1行元素中的第一个元素的地址
  4. 在*(pointer+m)后+n可以得到第m+1行中第n+1个元素的地址
  5. 最后在*(pointer+m)+n前+”*”可以得到第m+1行中第n+1行元素的值

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒