有人可以告诉我这个初始化是否有任何错误:
static unsigned char* var[1]
var[0] = new unsigned char[ 800 * 600 ]
这是在 var[0] 创建一个二维数组吗?这甚至有效吗?
有人可以告诉我这个初始化是否有任何错误:
static unsigned char* var[1]
var[0] = new unsigned char[ 800 * 600 ]
这是在 var[0] 创建一个二维数组吗?这甚至有效吗?
它创建了一个包含 480,000 个元素(又名 800*600)的数组并将其存储在 var[0] 中。它不是创建二维数组。只要var[0]
是unsigned char*
.
它在 var[0] 处创建一个长度为 (800*600) 的一维数组。您将能够通过以下方式访问其元素:
var[0][0]
var[0][1]
...
var[0][800*600-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。否则,只需交换值。
我认为您想要更像的东西(尽管我可能打错了问题);
static unsigned char* var = new char*[800]
for (int i =0; i < 800; i++)
var[i] = new char[600]
这将为您提供 800x600 二维字符数组。
是的,使用new[]
. 您正在寻找的是std::vector<unsigned int> var(800 * 600);
.