是否有人可以告诉我,如果有什么不正确使用这个初始化:C++初始化查询
static unsigned char* var[1]
var[0] = new unsigned char[ 800 * 600 ]
这是在创建无功[0]二维数组?这甚至有效吗?
是否有人可以告诉我,如果有什么不正确使用这个初始化:C++初始化查询
static unsigned char* var[1]
var[0] = new unsigned char[ 800 * 600 ]
这是在创建无功[0]二维数组?这甚至有效吗?
它在var [0]处创建一个长度为(800 * 600)的一维数组。您可以通过以下方式访问其中的元素:
var[0][0]
var[0][1]
...
var[0][800*600-1]
谢谢埃里克,澄清,我很困惑... ... – c0d3rz
它创建一个包含480,000个元素(又名800 * 600)的单个数组并将其存储在var [0]中。它不创建2D数组。只要var[0]
是unsigned char*
就是有效的。
这是否意味着它覆盖了var [1],var [2]等? – c0d3rz
否 - 如果'var [0]'是一个'unsigned char *',那么'var'必须是'unsigned char **'或者'std :: vector
由于'var'只有一个元素,因此'var [0]'是全部! –
您的代码不正确,因为
var[0]
不再是指针。
您可能需要做这样的事情:
static unsigned char* var;
var = new unsigned char[800 * 600];
不创建一个二维数组。它只是一个一维数组。话虽如此,如果您自己计算偏移量,则可以将它用作二维数组。例如访问位置(行,列),你可以这样做:
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的cols的数量像在矩阵)。这就是为什么我总是在第一个索引中使用600。否则,只需交换值。
'var [0]'类型为'unsigned char *'。 –
@ K-ballo的OP改变了代码。之前它只是'unsigned char * var;' – betabandido
或者你可以做'unsigned char var [600] [800];'并且为自己节省很多麻烦。 –
我想你想要更多的东西(尽管我可能会打断这个问题);
static unsigned char* var = new char*[800]
for (int i =0; i < 800; i++)
var[i] = new char[600]
这会给你一个800x600的2d字符数组。
谢谢埃文... – c0d3rz
是的,使用new[]
时相当不正确。你在找什么是std::vector<unsigned int> var(800 * 600);
。
'var'的类型是什么? – betabandido
是编译器给出的任何错误? – betabandido
嗨betabandido,对不起。我现在编辑了我的帖子。那么,这只是我正在经历的一些旧代码,无法理解发生了什么。编译器不会给出任何错误。 – c0d3rz