如何使用指针初始化2D数组.
int *mapTable[] = { {1,10} , {2,20} , {3,30} , {4,40} }; // It's giving error
Run Code Online (Sandbox Code Playgroud)
这int *mapTable是一个错误.
我怎样才能正确申报?
int *mapTable[] 不是2D数组:它是一维指针数组.
但是你去使用2D数组初始化器{ {1,10} , {2,20} , {3,30} , {4,40} }.
这就是它"给出错误"的原因.
尝试:
int mapTable[][2] = { {1,10} , {2,20} , {3,30} , {4,40} };
Run Code Online (Sandbox Code Playgroud)
而且,是的,您需要指定第二个维度的大小.
这有点复杂,而且通常太复杂而不值得.
它通常还需要动态分配,导致对象生命周期完全混乱:
int *mapTable[] = { new int[2], new int[2], new int[2], new int[2] };
int main() {
mapTable[0][0] = 1; mapTable[0][1] = 10;
mapTable[1][0] = 2; mapTable[1][1] = 20;
mapTable[2][0] = 3; mapTable[2][1] = 30;
mapTable[3][0] = 4; mapTable[3][1] = 40;
// then, at the end of your program:
for (size_t i = 0; i < 4; i++)
delete[] mapTable[i];
}
Run Code Online (Sandbox Code Playgroud)
如你所见,这并不理想.
您可以避免动态分配:
int mapTable0[] = {1,10};
int mapTable1[] = {2,20};
int mapTable2[] = {3,30};
int mapTable3[] = {4,40};
int *mapTable[] = { &mapTable0[0], &mapTable1[0], &mapTable2[0], &mapTable3[0] };
Run Code Online (Sandbox Code Playgroud)
但我不确定你为什么要走这条大道.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |