【发布时间】:2013-04-06 18:40:03
【问题描述】:
这个网站上的第一个计时器,所以这里..
我是 C++ 的新手,目前正在阅读 D.S. Malik 的《使用 C++ 第二版的数据结构》一书。
在书中 Malik 提供了两种创建动态二维数组的方法。 在第一种方法中,您将变量声明为指针数组,其中每个指针都是整数类型。例如。
int *board[4];
..然后使用 for 循环创建“列”,同时将指针数组用作“行”。
第二种方法,你用一个指针指向一个指针。
int **board;
board = new int* [10];
等等
我的问题是:哪种方法更好? ** 方法对我来说更容易可视化,但第一种方法可以以几乎相同的方式使用。这两种方法都可以用来制作动态二维数组。
编辑:上面的帖子不够清楚。这是我尝试过的一些代码:
int row, col;
cout << "Enter row size:";
cin >> row;
cout << "\ncol:";
cin >> col;
int *p_board[row];
for (int i=0; i < row; i++)
p_board[i] = new int[col];
for (int i=0; i < row; i++)
{
for (int j=0; j < col; j++)
{
p_board[i][j] = j;
cout << p_board[i][j] << " ";
}
cout << endl;
}
cout << endl << endl;
int **p_p_board;
p_p_board = new int* [row];
for (int i=0; i < row; i++)
p_p_board[i] = new int[col];
for (int i=0; i < row; i++)
{
for (int j=0; j < col; j++)
{
p_p_board[i][j] = j;
cout << p_p_board[i][j] << " ";
}
cout << endl;
}
【问题讨论】:
-
我不确定这个问题是否会改变,如果你把它变成一维的。
int board[4]与int *board = new int[4]。你会同意吗?它可能会改善您的答案。 -
其实用
int *board[4]已经不是二维数组的动态分配了,是4个指针数组的静态分配。 -
@JBL:小心地把static这个词抛在脑后。你说得对,静态分配是正确的,但是使用了自动存储持续时间,这可能会让人感到困惑。无论如何,我相信“动态数组”一词首先指的是它不仅仅是一个血腥的
int board[4][4],即它不一定是矩形的。 -
见stackoverflow.com/a/936709/3241228 这个答案的第二部分可能是最简洁有效的解决方案(恕我直言)。
-
哪个更快?我猜是第一个(因为它是静态的)
标签: c++ arrays pointers memory-management dynamic-arrays