第九章——数组 第七节——通过地址引用二维数组

第九章——数组 第七节——通过地址引用二维数组

亓翎_Re-Tikara Lv5

二维数组和数组元素的地址

int a[3][4],*p;

二维数组a由若干个一维数组组成

  1. a[3][4]可视为由a[0],a[1], a[2]这三个元素组成。其中a[0] ,a[1], a[2]又是由四个整型数组成的一维数组,可用a[0][0],a[0][1]等来引用a[0]中的某个元素,其它以此类推。
  2. 一维数组名代表了一个不可变的地址常量,所以a[0] ,a[1], a[2]也代表了一个地址常量,其值依次为二维数组每行第一个元素的地址,基类型就是数组元素的类型。所以a[0]++是非法的,而a[0]+1表示第一行第二个元素,即a[0][1]
  3. 指针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);

01..png

二维数组名也是一个地址常量(可理解为一个行指针)

  • 二维数组名是一个存放地址常量指针,其值为二维数组第一个元素的地址
  • 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 进行许可。