C 语言二维数组指针详解及示例:深入理解数组地址与元素访问
#include <stdio.h>
#define FORMAT "%d, %d \n"
int main() { int a[3][4] = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };
printf(FORMAT, a[0][0], *a); // prints "1, 1"
printf(FORMAT, a[0][0], *(a+0)); // prints "1, 1"
printf(FORMAT, a[0][0], **a); // prints "1, 1"
printf(FORMAT, a[0], *(a+0)); // prints "1, 3"
printf(FORMAT, &a[0], &a[0][0]); // prints "6422288, 6422288" (address may vary)
printf(FORMAT, a[1], *(a+1)); // prints "9, 9"
printf(FORMAT, &a[1][0], *(a+1)+0); // prints "9, 9" (address may vary)
printf(FORMAT, a[2], *(a+2)); // prints "17, 17"
printf(FORMAT, &a[2], a+2); // prints "6422320, 6422320" (address may vary)
printf(FORMAT, a[1][0], *(*a+4)); // prints "9, 3"
return 0;
}
// 以下是对代码的详细解释:
// 1. 声明二维数组: // int a[3][4] = {{1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23}}; // 该语句声明了一个 3 行 4 列的二维数组 a,并初始化了其元素值。
// 2. 数组地址与元素访问: // - a: 表示数组 a 的首地址,即 a[0][0] 的地址。 // - a + 0: 表示数组 a 第 0 行的地址,等价于 &a[0]。 // - a[0]: 表示数组 a 第 0 行的地址,等价于 a + 0。 // - *a: 表示数组 a 第 0 行的首元素地址,即 a[0][0] 的地址。 // - **a: 表示数组 a 第 0 行的首元素的值,即 a[0][0] 的值。 // - *(a + 0): 表示数组 a 第 0 行的首元素地址,即 a[0][0] 的地址。 // - a[i][j]: 表示数组 a 第 i 行第 j 列元素的值。 // - &a[i][j]: 表示数组 a 第 i 行第 j 列元素的地址。
// 3. 代码示例中的输出结果: // - printf(FORMAT, a[0][0], *a); // 输出 "1, 1",因为 a[0][0] 和 *a 都指向数组 a 的第一个元素。 // - printf(FORMAT, a[0][0], *(a+0)); // 输出 "1, 1",因为 a[0][0] 和 *(a+0) 都指向数组 a 的第一个元素。 // - printf(FORMAT, a[0], *(a+0)); // 输出 "1, 3",因为 a[0] 是数组 a 第 0 行的地址,而 *(a+0) 是数组 a 第 0 行的首元素值。 // - printf(FORMAT, &a[0], &a[0][0]); // 输出 "6422288, 6422288" (地址可能有所不同),因为 &a[0] 和 &a[0][0] 都指向数组 a 的第一个元素的地址。 // - printf(FORMAT, a[1], *(a+1)); // 输出 "9, 9",因为 a[1] 是数组 a 第 1 行的地址,而 *(a+1) 是数组 a 第 1 行的首元素值。 // - printf(FORMAT, &a[1][0], *(a+1)+0); // 输出 "9, 9" (地址可能有所不同),因为 &a[1][0] 是数组 a 第 1 行第一个元素的地址,而 *(a+1)+0 是数组 a 第 1 行第一个元素的地址。 // - printf(FORMAT, a[2], *(a+2)); // 输出 "17, 17",因为 a[2] 是数组 a 第 2 行的地址,而 *(a+2) 是数组 a 第 2 行的首元素值。 // - printf(FORMAT, &a[2], a+2); // 输出 "6422320, 6422320" (地址可能有所不同),因为 &a[2] 是数组 a 第 2 行的地址,而 a+2 是数组 a 第 2 行的地址。 // - printf(FORMAT, a[1][0], *(*a+4)); // 输出 "9, 3",因为 a[1][0] 是数组 a 第 1 行第一个元素的值,而 *(*a+4) 是数组 a 第 0 行第 4 个元素的值。
// 注意:实际地址值可能会根据编译器和运行环境的不同而有所差异。
// 通过这个例子,我们深入理解了二维数组指针的使用,以及数组地址、元素访问之间的关系。希望这能帮助你更好地掌握 C 语言中二维数组指针的应用。
原文地址: https://www.cveoy.top/t/topic/nZhQ 著作权归作者所有。请勿转载和采集!