第九章——数组 第七节——通过地址引用二维数组
二维数组和数组元素的地址
int a[3][4],*p;
二维数组a由若干个一维数组组成
a[3][4]可视为由a[0],a[1], a[2]这三个元素组成。其中a[0] ,a[1], a[2]又是由四个整型数组成的一维数组,可用a[0][0],a[0][1]等来引用a[0]中的某个元素,其它以此类推。- 一维数组名代表了一个
不可变的地址常量,所以a[0] ,a[1], a[2]也代表了一个地址常量,其值依次为二维数组每行第一个元素的地址,基类型就是数组元素的类型。所以a[0]++是非法的,而a[0]+1表示第一行第二个元素,即a[0][1] - 指针p的基类型与a[i]相同,所以p=a[i]是合法的。因为a[i]==(a+i),所以p=(a+i)
说明
1 维:& (a[i]) = & ( (a+i) ); 注意 & 抵消,得 &a[i] = (a+i )2 维; &(a[i][j]) = (*(a+i) + j);

二维数组名也是一个地址常量(可理解为一个行指针)
- 二维数组名是一个存放
地址常量的指针,其值为二维数组第一个元素的地址。 a的值和a[0][0]相同,不过基类型不同。a的基类型为具有4个整型元素的数组类型,即a+0的值与a[0]相同,a+1的值与a[1]相同。- a+1中的数值1是4*2个字节
- 赋值语句
p=a;是不合法的,因为p和a的基类型不同。
二维数组元素的地址
元素的地址有以下几种表示方式:
- &a[i][j]
- a[i]+j
- *(a+i)+j
- &a[0][0]+i*4+j
- a[0]+4*i+j
注意
&a [i][j],a[i]都是基类型为int类型,而a的基类型为具有四个元素的一维数组,所以a+i*4+j是错误的。
则数组a中的元素a[i][j]有以下五种表达方式:
- a[i][j]
- (*(a+i))[j]
- *(a[i]+j)
- ((a+i)+j)
- (&a[0][0]+4i+j)
以上均等价于
- &a[i][j]
- a[i]+j
- *(a+i)+j
- &a[0][0]+i*4+j
- a[0]+4*i+j
- 标题: 第九章——数组 第七节——通过地址引用二维数组
- 作者: 亓翎_Re-Tikara
- 创建于 : 2026-02-07 02:21:28
- 更新于 : 2026-02-07 02:26:19
- 链接: https://re-tikara.fun/Blog/posts/f07b224/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。