是否有人可以告訴我,如果有什麼不正確使用這個初始化: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