文章目录
总结
一、多维数组本质
二、完整代码示例
总结
n 维数组名称本质 是 n-1 级数组指针
一、多维数组本质
给定多维数组 :
// 声明一个多维数组 int array[2][3];
打印二维数组 , 打印 array 和 array + 1 的值 , array 是数组首元素地址 ;
打印结果是 array = 6422188, array + 1 = 6422200 , 往后跳了 12 字节 ; 该二维数组 2 行 3 列 , 每行有 3 个 int 值 , 12 字节 , 这是跳转了 一列 的内存大小 ;
上述 二维数组 名 , 相当于 一级数组指针 ;
// 打印 array 和 array + 1 的值 , array 是数组首元素地址 // array = 6422188, array + 1 = 6422200 , 往后跳了 12 字节 // 该二维数组 2 行 3 列 , 每行有 3 个 int 值 , 12 字节 // 这是跳转了 一列 的内存大小 // 多维数组名 相当于一个 数组指针 // 二维数组名 相当于一个 一维数组指针 // 三维数组名 相当于一个 二维数组指针 printf("array = %d, array + 1 = %d\n", array, array + 1);
打印 &array 和 &array + 1 的值 , &array 是数组首地址 ;
打印结果是 &array = 6422188, &array + 1 = 6422212 , 往后跳了 24 字节 ; 二维数组总大小是 24 字节 , 这是跳转了一个二维数组的大小 ;
// 打印 &array 和 &array + 1 的值 , &array 是数组首地址 // &array = 6422188, &array + 1 = 6422212 , 往后跳了 24 字节 // 二维数组总大小是 24 字节 , 这是跳转了一个二维数组的大小 ; printf("&array = %d, &array + 1 = %d\n", &array, &array + 1);
二、完整代码示例
完整代码示例 :
#include <stdio.h> #include <stdlib.h> #include <string.h> /** * @brief main 多维数组名本质 * @return */ int main() { // 声明一个多维数组 int array[2][3]; // 循环控制变量 int i = 0, j = 0; // 用于给 多维数组 赋值时的累加索引值 int index = 1; // 给多维数组赋值 for(i = 0; i < 2; i++) { for(j = 0; j < 3; j++) { array[i][j] = index++; } } // 打印 多维数组 元素 值 for(i = 0; i < 2; i++) { for(j = 0; j < 3; j++) { printf("%d\n", array[i][j]); } } // 打印 array 和 array + 1 的值 , array 是数组首元素地址 // array = 6422188, array + 1 = 6422200 , 往后跳了 12 字节 // 该二维数组 2 行 3 列 , 每行有 3 个 int 值 , 12 字节 // 这是跳转了 一列 的内存大小 // 多维数组名 相当于一个 数组指针 // 二维数组名 相当于一个 一维数组指针 // 三维数组名 相当于一个 二维数组指针 printf("array = %d, array + 1 = %d\n", array, array + 1); // 打印 &array 和 &array + 1 的值 , &array 是数组首地址 // &array = 6422188, &array + 1 = 6422212 , 往后跳了 24 字节 // 二维数组总大小是 24 字节 , 这是跳转了一个二维数组的大小 ; printf("&array = %d, &array + 1 = %d\n", &array, &array + 1); // 定义 指向数组 的指针变量 int (*p)[3] = NULL; // 为 数组指针变量 赋值 p = array; // 打印 多维数组 元素 值 printf("\np:\n"); for(i = 0; i < 2; i++) { for(j = 0; j < 3; j++) { printf("%d\n", p[i][j]); } } // 由上面的打印结果可知 , 二维数组的名称 本质是 一级数组指针 // n (n >= 2) 维数组名称本质 是 n-1 级数组指针 // 命令行不要退出 system("pause"); return 0; }
执行结果 :