簡體   English   中英

使用指針初始化C ++數組,大小為8

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM