3.8.3 嵌套的数组

目录

P178

补充一下指针的知识
在C语言中,二维数组 A*A**A 的含义可以通过数组与指针的关系来理解。以下是详细解释:


1. 二维数组的内存布局
假设定义了一个二维数组:

int A[3][2] = {{1, 2}, {3, 4}, {5, 6}};

内存中按行优先顺序连续存储:

A[0][0] (1) | A[0][1] (2) | A[1][0] (3) | A[1][1] (4) | A[2][0] (5) | A[2][1] (6)

2. *A 的含义

  • A 是二维数组名,类型为 int[3][2](数组的数组)。
  • 在大多数表达式中(如 *A),数组会退化为指向其首元素的指针,即 A 退化为 &A[0],类型为 int (*)[2](指向一维数组的指针)。
  • *A 的解引用
    • *A 等价于 A[0],即第0行的首地址(类型为 int[2])。
    • A[0] 也会退化为指向该行第一个元素的指针(&A[0][0],类型 int *)。

示例

printf("%p\n", *A); // 输出 &A[0][0] 的地址
printf("%d\n", (*A)[1]); // 输出 A[0][1] 的值(2)

3. **A 的含义

  • *A 已经退化为 &A[0][0](类型 int *),指向第0行第0列的元素。
  • **A 的双重解引用
    • **A 等价于 *(*A),即 A[0][0] 的值。

示例

printf("%d\n", **A); // 输出 A[0][0] 的值(1)

另外,int (*A[4])是一个指针数组:由于方括号的优先级比星号高,所以A[4]表示数组,int *表示数组中每个元素的类型。*A不是空指针,但是**A是空指针

嵌套数组另一种声明如下
image
在看一个例子
image

posted @ 2025-07-22 15:38  最爱丁珰  阅读(7)  评论(0)    收藏  举报