C ++初始化查询

时间:2012-06-01 17:43:02

标签: c++ initialization

有人可以告诉我这个初始化是否有任何不正确之处:

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

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

5 个答案:

答案 0 :(得分:3)

它正在创建一个包含480,000个元素(也就是800 * 600)的单个数组,并将其存储在var [0]中。它不是创建2D阵列。只要var[0]unsigned char*,它就有效。

答案 1 :(得分:1)

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

您可能希望执行以下操作:

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

这不会创建2D数组。它只是一维阵列。话虽如此,如果您自己计算偏移量,可以将其用作2D数组。例如,访问位置(行,列),您可以这样做:

var[row * 600 + col]

如果你真的想要一个“真正的”2D阵列,你需要使用例如:

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];

BTW,我假设600是行数,800是cols数(如矩阵中)。这就是为什么我总是在第一个索引中使用600。否则,只需交换值。

答案 2 :(得分:1)

我认为你想要更喜欢的东西(虽然我可能会打断这个错误的问题);

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

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

这将为您提供800x600二维字符阵列。

答案 3 :(得分:1)

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

var[0][0]
var[0][1]
...
var[0][800*600-1]

答案 4 :(得分:1)

是的,使用new[]是完全错误的。你要找的是std::vector<unsigned int> var(800 * 600);