2013-10-05 47 views
1

我試圖創建C++中的二維陣列使用雙指針方法。但是,當我初始化變量我總是得到該數組的大小爲8起初,我嘗試這樣做:初始化C++數組的指針,得到大小爲8

double** sobel_x; 

,並得到了大小爲8,然後當我嘗試這樣做:

double** sobel_x; 
    sobel_x = new int*[3]; 
    for(int i = 0; i < sizeof(sobel_x); i++) { 
    sobel_x[i] = new int[3]; 
    } 

有人可以先向我解釋爲什麼數組初始化爲8而第二個如何改變這個大小?

+2

'新int' - >'新double'? – P0W

+0

你如何檢查尺寸?您可能會看到指針的大小,而不是數組的大小 - 您只通過存儲指針而丟棄數組的大小。 –

+0

@PW謝謝!我什至沒有注意到我這樣做 – azrosen92

回答

4

此代碼:

double** sobel_x = new int*[3]; 
std::cout << sizeof(sobel_x); 

它將總是打印sizeof指針因爲sizeof在編譯時間(基於類型,這是double**在這種情況下)評估,無論您分配了什麼在運行時指向這個指針。

使用std::vector代替:

std::vector< std::vector<double> > sobel_x(3, std::vector<double>(3, 0.0)); 
std::cout << sobel_x.size(); 

請注意,即使你將能夠檢索大小,大小將是字節。它不會給你元素的數量。爲了使用數組實現這一點,你可以使用一個靜態數組與自動存儲時間:

double sobel_x[3][3] = { 0.0 }; 
std::cout << sizeof(sobel_x);       // <-- outputs 72 
std::cout << sizeof(sobel_x[0]);      // <-- outputs 24 
std::cout << sizeof(sobel_x)/sizeof(sobel_x[0]); // <-- outputs 3 
+0

有沒有辦法用數組來做到這一點? – azrosen92

+0

@ azrosen92:現在請我的答案:) – LihO

+0

嗯好吧,我想這引出了我的第二個問題的話,我想在另一個函數我寫的是我設計採取任意數組的大小用作輸入這個數組。我發現在C++中,你不能聲明一個函數'void FunctionName(double [] [] array)''你必須使用'void FunctionName(double ** array)'。那麼有什麼辦法可以在'FunctionName'中創建一個數組? – azrosen92

1

你呼籲sobel_x的sizeof和sobel_x是一個指針。這意味着8是您系統上的指針的大小(推測是64位機器)。

這篇文章解釋說,你想做什麼,你不能做的:C++: getting the row size of a multidimensional array passed to a function

如果你需要計算的長度在運行時,使用STL類,如載體之一。

雖然你簡單的使用情況下,你已經知道有多少元素的數組(在這種情況下,3)指向sobel_x,所以只是使用它作爲你的循環測試條件。