Ris*_*hal 8 c c++ arrays multidimensional-array
为什么没有必要提到多维数组的第一维,必须提到其他维度:
int A[][][2]={{{1,2},{3,4}},{{4,5},{5,6}}}; // error
int A[][2][2]={{{1,2},{3,4}},{{4,5},{5,6}}}; // OK
Run Code Online (Sandbox Code Playgroud)
我无法理解这背后的概念或逻辑.
有必要提及二维数组的两个维度,除非它在函数的参数中或者如果存在初始值设定项,则可以省略第一维。
例如,当用作函数中的参数时,
int 2D_arr[m][n]
Run Code Online (Sandbox Code Playgroud)
转换成
int (*2D_arr)[n]
Run Code Online (Sandbox Code Playgroud)
因此,可以省略第一维。但是,必须存在第二维以告诉编译器该指针2D_arr
是指向ints数组的n
指针。
在第二种情况下,当存在初始化程序时
int A[][2][2]={{{1,2},{3,4}},{{4,5},{5,6}}};
Run Code Online (Sandbox Code Playgroud)
编译器仅使用初始化器的长度来计算第一维。维度的其余部分必须在声明时明确指定。
因为在使用多维数组时,计算实际索引会使用除第一个之外的所有维度大小.例如,对于声明为3D阵列int arr[3][4][5];
,arr[i][j][k]
是通过定义 *(&(arr[0][0][0]) + k + 5 *(j + 4 * i))
因此,当第一维可以从上下文初始化推导出来时,或者可以忽略(当在函数中获取参数时),可以省略它.
例子:
int arr[][2] = { 1,2,3,4 };
void setArr(void *container, int arr[][4]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
773 次 |
最近记录: |