一、概述
接上一篇文章我们讲解了两种实现方式,不懂得同学希望能看一下之前的文章,本篇文章我们会继续讲解。
类型说明符 (*指针名) [常量表达式];
接下来我们看一段代码对之前的内容进行梳理:
有下面程序段如下:
int a[3][4];
int (*p)[4]=&a[0];等价于 int (*p)[4]=a;
//定义了一个指向一维数组的指针p,指向包含4个int型元素的一维数组a[0]。此时p+1指向下一个一维数组a[1]。
二维数组元素a[i][j]的表示方法有很多种,这里我们只讲解两种:
*(*(p+i)+j);
*(a[i]+j);
我们思考一个问题:
a+i代表行号为i的行首地址(按行变化)我们是都知道的
那么*(a+i)代表什么?
a[0]代表a[0][0]的地址
a[0]+2代表a[0][2]的地址
其实就是位置不断地增加 前进,可以当成一个移动的风向标。、
思考:
a[i]+j代表谁的地址?
我们首先要对a[i]的性质进行分析梳理,如果a是一维数组名,则a[i]代表a数组的第i+1个元素。那么如果a是二维数组名的时候是什么意思那,其实是二维数组和一维数组大同小异a[i]代表一维数组名,但是它只是一个地址而已,这并不代表某一元素的值。即:a,a+i,a[i],a[i]+j,*(a+i)+j都是地址,而*(a[i]+j),*(*(a+i)+j)都是元素