c语言指针篇——数组指针和指向二维数组的指针变量(*p)[N]

本文详细解析了二维数组及其指针的概念,包括二维数组的结构、数组名与指针的关系,以及如何通过列指针和行指针访问数组元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组指针

首先,我们先介绍一下二维数组和二维数组的指针,二维数组相当于一个特殊的一维数组里面每个元素又是一个一维数组,例如:int a [ 3 ] [3],可以看成一个3行的一个列数组,每一列的元素又是一个长度为3的数组,数组名的一个特殊一维数组的首地址,如下:
这里写图片描述
a(第0行的首地址,也是可以是&a [0])指向a [0],对0行首地址元素的引用就有 *a = a [0];
a + 1(第一行的首地址)指向a [1],有*(a + 1)= a [1];
a + 2(第二行的首地址)指向a [2],有*(a + 2)= a [2];
a + i(第i行的首地址)指向一个[i]中,有*(a + 1)= a [i]中。
而a[0],a[1],a[2]又是里面一维数组的数组名,因此a[i]可表示i行的首地址:
a[0](第0行第0个元素的地址)指向一个[0] [ 0 ],有*(a [ 0 ] +0)= a [0] [ 0 ];
a [0]+1(第0行第1个元素的地址)指向a [0] [1],有*(a [0] +1)= a [0] [1];
a [0] +2(第0行第2个元素的地址)指向a [0] [2],有*(a [0] +2)= a [0] [2]
总结:a[i]+j(第i行第j列个元素的地址)指向a[i][j], 有*(a[i]+j)=a[i][j],
即 * (*(a+i)+j)=a[i][j]。

二维数组的指针变量

对于指向二维数组的指针变量p,可以有两种:
一种是指向数组元素的列指针,一种是指向行的行指针,这时,p不是指向一个具体的数组元素,而是指向一个包含m个元素的一维数组。这里对行指针特殊说明一下;
行指针的定义形式为:类型标识符 (*指针变量名)[长度];
例如: int a[3][4],(*p)[4]=a; //这里也可以写为int a[3][4],(*p)[4]=&a[0];
其中p,p+1,p+2和a,a+1,a+2都是第i行的首地址。
使用指针变量访问二维数组的任意一个元素的方法
(1)使用列指针:定义一个列指针p,让它指向二维数组的第0个元素

int a[3][4];
int *p;
p=&a[0][0];   //因为a[0]是第0行的数组名,所以p=&a[0][0]相当于p=a[0],因为a[i][j]前面共有i*4+j个元素,该二维数组的任意i行j列元素可表示为*(p+i*4+j)

(2)使用行指针:定义一个行指针p,让它指向二维数组的第0行

int a[3][4];
int (*p)[4];
p=a;   //也可以为p=&a[0];   

其中* ( *(p+i)+j)表示任意一个i行j列的元素。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值