[英]Initializing C++ arrays with pointers, getting size 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號,其次如何更改該大小?
這段代碼:
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
您在sobel_x上調用sizeof,而sobel_x是一個指針。 這意味着8是系統(大概是64位計算機)上指針的大小。
這篇文章解釋說,您無法做您想做的事情: C ++:獲取傳遞給函數的多維數組的行大小
如果需要在運行時計算長度,請使用STL類之一,例如vector。
盡管對於您的簡單用例,您已經知道sobel_x指向的數組中有多少個元素(在本例中為3),所以將其用作循環中的測試條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.