rpo*_*lai 2 c++ initialization definition multidimensional-array
我在使用以下定义进行编译时遇到错误.
int matrix[ ][ ] = { { 1, 2, 3}, {4,5,6} };
char str[ ][ ] = { "abc", "fgh" };
Run Code Online (Sandbox Code Playgroud)
为什么编译器抱怨缺少下标和太多的初始化器.
如果数组定义为,int arr[ ROWS ][ COLS ];
那么任何数组表示法arr[ i ][ j ]
都可以转换为指针表示法
*( arr + i * COLS + j )
Run Code Online (Sandbox Code Playgroud)
观察表达式只需要COLS,它不需要ROWS.因此,数组定义可以等效地编写为
int arr [][ COLS ];
Run Code Online (Sandbox Code Playgroud)
但是,错过第二个维度是不可接受的.
通过以下给出的三个实例可以实现进一步的理解.在所有三个示例中,相同的数组表示法arr[ 2 ][ 3 ]
转换为指针表示法.
在A和B之间,ROWS是相同的,但COLS是不同的; result =指针表示法不同.
在A和C之间,ROWS是不同的,但COLS是相同的; result =指针表示法是相同的.
例子:
A. int arr[ 4 ][ 7 ]; arr[2][3] = arr + 2 * 7 + 3 = arr + 17
B. int arr[ 4 ][ 5 ]; arr[2][3] = arr + 2 * 5 + 3 = arr + 13
C. int arr[ 6 ][ 7 ]; arr[2][3] = arr + 2 * 7 + 3 = arr + 17
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2609 次 |
最近记录: |