【发布时间】:2013-07-30 09:53:22
【问题描述】:
我一直在尝试为二维数组分配动态内存。经过大量搜索后,我发现了一个看起来比其他代码更容易的代码,但我仍然无法理解它的每一个细节。有人可以解释一下以下代码如何动态地为数组分配内存。真的很期待帮助和抱歉,但我是 C++ 新手,想学习它。
void main()
{
int m,n;
cin>>m;
cin>>n;
//Allocate
int *a = new int[m*n];
//Use a[m][n]
for( int i = 0 ; i < m ; i++)
for ( int j = 0 ; j < n ; j++)
a[i*n + j] = 1;
}
【问题讨论】:
-
如果您使用的是 C++,请为数组使用正确的 C++ 类型,例如
std::vector或std::array而不是 C 风格的内存分配。 -
这实际上是一个一维数组,长度为row*columns。这在图像处理中很常见。但是该数组的索引就像它是一个 m * n 数组一样。其中 m 是行数,n 是列数。因此 i * n 将索引放在第 i 行,您还必须
+ j才能获得正确的列。
标签: c++ arrays windows visual-c++ multidimensional-array