我遇到了问题。我想创建2D数组行= 3 cols = 2 我的代码如下
int **ptr;
int row=3;
int col=2;
ptr=new int *[col];
for (int i=0;i<col;i++)
{
ptr[i]=new int [row];
}
for (int i=0;i<row;i++)
{
for (int j=0;j<col;j++)
{
cout<<ptr[i][j]<<" ";
}
cout<<endl;
}
但我得到输出(2 * 2)
0 0
0 0
答案 0 :(得分:1)
使用2D数组时,您有以下内容:
HOLDS YOUR ROWS
|
|
[x0] ([x0_1][x0_2][x0_3]...[x0_n]) <- ROW ARRAY
[x1] ([x1_1][x1_2][x1_3]...[x1_n]) <- ROW ARRAY
[x2] ([x2_1][x2_2][x2_3]...[x2_n]) <- ROW ARRAY
. .
. .
. .
[xm] ([xm_1][xm_2][xm_3]...[xm_n]) <- ROW ARRAY
这意味着首先必须创建每一行:
for (int i=0;i<row;i++)
{
ptr[i]=new int[col]; // Each row has col number of cells
}
从我发布文章开头的表格中,您可以获得([xP_1][xP_2][xP_3]...[xP_n])
。
你的代码的下一部分必须实际初始化每一行中的单元格,所以在你的外部循环中你必须遍历你的行然后在内部循环中你必须迭代你的列,因为每行都有来自{的COL单元格{1}}。所以我们得到:
ptr[i]=new int[COL];
最后我们已经(我已将for (int i=0;i<row;i++)
{
for (int j=0;j<col;j++)
{
cout<<ptr[i][j]<<" ";
}
cout<<endl;
}
替换为row
而rows
替换为col
,以便为您提供更具可读性的内容。我希望:D):
cols
输出结果为:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
int **ptr;
int rows = 3;
int cols = 2;
ptr = new int *[rows];
for (int row=0; row<rows; row++)
{
ptr[row]=new int [cols];
}
for(int row=0; row<rows; row++)
{
for(int col=0; col<cols; col++)
{
ptr[row][col] = 0;
cout << ptr[row][col] << " ";
}
cout << endl;
}
// Do something with the 2D array
// ...
// Delete all
for(int row = 0; row < rows; row++) delete[] ptr[row];
delete[] ptr;
return 0;
}
希望这会有所帮助。另外请记住,您需要使用某些值初始化阵列的单元格。像你一样离开它并不是一个好习惯 - 创建然后直接进入显示部分而不添加任何值。