0

有人可以告诉我这个初始化是否有任何错误:

static unsigned char* var[1]   
var[0] = new unsigned char[ 800 * 600 ]

这是在 var[0] 创建一个二维数组吗?这甚至有效吗?

4

5 回答 5

3

它创建了一个包含 480,000 个元素(又名 800*600)的数组并将其存储在 var[0] 中。它不是创建二维数组。只要var[0]unsigned char*.

于 2012-06-01T17:46:30.200 回答
1

它在 var[0] 处创建一个长度为 (800*600) 的一维数组。您将能够通过以下方式访问其元素:

var[0][0]
var[0][1]
...
var[0][800*600-1]
于 2012-06-01T18:00:55.310 回答
1

您的代码不正确,因为var[0]不再是指针。

您可能想要执行以下操作:

static unsigned char* var;
var = new unsigned char[800 * 600];

这不会创建二维数组。它只是一个一维数组。话虽如此,如果您自己计算偏移量,则可以将其用作二维数组。例如访问位置 (row, col) 你可以这样做:

var[row * 600 + col]

如果你真的想要一个“真正的”二维数组,你将需要使用例如:

static unsigned char** var;
var = new unsigned char*[600];
for (int i = 0; i < 600; i++)
    var[i] = new unsigned char[800];

当然,如果你不需要在运行时动态指定数组大小,你可以只使用静态分配的数组:

static unsigned char var[600][800];

顺便说一句,我假设 600 是行数,800 是列数(就像在矩阵中一样)。这就是为什么我总是在第一个索引中使用 600。否则,只需交换值。

于 2012-06-01T17:48:41.757 回答
1

我认为您想要更像的东西(尽管我可能打错了问题);

static unsigned char* var = new char*[800]

for (int i =0; i < 800; i++)
     var[i] = new char[600]

这将为您提供 800x600 二维字符数组。

于 2012-06-01T17:51:47.490 回答
1

是的,使用new[]. 您正在寻找的是std::vector<unsigned int> var(800 * 600);.

于 2012-06-01T18:07:53.070 回答