日志14
二维数组与多维数组
一、 二维数组
概念:二维数组可以看作是一个表格,有行和列的概念。它是一种特殊的数组,其元素本身也是数组。例如,int arr[3][4]可以理解为有3行4列的整数数组,总共可以存储3 * 4 = 12个整数。
1.初始化:
(1)按行初始化:可以像int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};这样初始化。其中,{1, 2, 3}是第一行元素的初始化列表,{4, 5, 6}是第二行元素的初始化列表。
(2)部分初始化:如果提供的初始化值少于数组元素总数,其余元素会被初始化为相应类型的默认值。
例如,int arr[2][3] = {{1, 2}, {3}};
第一行的前两个元素为1和2,第三个元素为0;第二行第一个元素为3,后两个元素为0。
2.元素访问:通过两个下标来访问元素,第一个下标表示行,第二个下标表示列。例如,在int arr[3][4]中,arr[1][2]表示访问第二行(下标从0开始,所以是1)第三列(下标为2)的元素。
3.与指针的关系:二维数组名也可以看作是指向数组(行)的指针。例如,对于int arr[3][4],arr可以看作是一个指向包含4个整数的数组的指针,arr + 1会指向第二行(因为arr所指向的类型大小是4 * sizeof(int))。
4.作为函数参数:当二维数组作为函数参数时,函数形参的定义方式有多种。一种常见的方式是指定第二维的大小,如void func(int arr[][4], int rows),这样编译器才能正确地计算元素的位置。
二、多维数组(以三维数组为例)
1.概念:三维数组可以看作是一个“立方体”结构,在二维数组的基础上增加了一个维度。
例如,int arr[2][3][4]可以理解为有2个“平面”,每个平面是一个3行4列的二维数组,总共可以存储2 * 3 * 4 = 24个整数。
2.初始化:初始化方式类似于二维数组,但需要更多的嵌套括号来表示不同维度。
例如,int arr[2][3][4] = {{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}, {{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}};。
3.元素访问:通过三个下标来访问元素,例如,arr[1][2][3]表示访问第二个平面(下标从0开始,所以是1)的第三行(下标为2)的第四列(下标为3)的元素。
4.与指针的关系:三维数组名同样与指针有关,它是一个指向二维数组的指针。其指针运算和元素定位相对更加复杂,因为涉及到更多的维度和偏移量计算。
5.作为函数参数:和二维数组类似,需要指定除第一维以外的其他维度大小,以便编译器正确处理元素的位置,如void func(int arr[][3][4], int num_planes)。这种要求是因为在传递数组时,数组会退化为指针,编译器需要知道后续维度的大小来正确地计算内存偏移量。