2012-06-01 71 views
0

是否有人可以告訴我,如果有什麼不正確使用這個初始化:C++初始化查詢

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

這是在創建無功[0]二維數組?這甚至有效嗎?

+1

'var'的類型是什麼? – betabandido

+1

是編譯器給出的任何錯誤? – betabandido

+0

嗨betabandido,對不起。我現在編輯了我的帖子。那麼,這只是我正在經歷的一些舊代碼,無法理解發生了什麼。編譯器不會給出任何錯誤。 – c0d3rz

回答

1

它在var [0]處創建一個長度爲(800 * 600)的一維數組。您可以通過以下方式訪問其中的元素:

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

謝謝埃裏克,澄清,我很困惑... ... – c0d3rz

3

它創建一個包含480,000個元素(又名800 * 600)的單個數組並將其存儲在var [0]中。它不創建2D數組。只要var[0]unsigned char*就是有效的。

+0

這是否意味着它覆蓋了var [1],var [2]等? – c0d3rz

+0

否 - 如果'var [0]'是一個'unsigned char *',那麼'var'必須是'unsigned char **'或者'std :: vector '或者其他類型的類型。分配給'var [0]'不會影響'var [1]'或var'的任何其他元素。 –

+0

由於'var'只有一個元素,因此'var [0]'是全部! –

1

您的代碼不正確,因爲 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。否則,只需交換值。

+1

'var [0]'類型爲'unsigned char *'。 –

+0

@ K-ballo的OP改變了代碼。之前它只是'unsigned char * var;' – betabandido

+0

或者你可以做'unsigned char var [600] [800];'並且爲自己節省很多麻煩。 –

1

我想你想要更多的東西(儘管我可能會打斷這個問題);

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

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

這會給你一個800x600的2d字符數組。

+0

謝謝埃文... – c0d3rz

1

是的,使用new[]時相當不正確。你在找什麼是std::vector<unsigned int> var(800 * 600);