我碰巧問自己一個關於C++數組的問題。 那麼,我們都知道數組是固定的東西集合,我說是固定的,因爲在定義數組時需要聲明數組的長度。 好吧,讓我們考慮一個例子:處理數組大小
char myarray[10] = {'\0'};
int sz = sizeof(myarray); // It is supposed to be 10
嗯,這是正確的,10是返回的sizeof的數量。這可以由編譯器完成,因爲他知道它爲該變量放置了多少空間。
現在考慮在這種情況下會發生什麼:
void dosome(mystruct* arr) {
int elements = sizeof(arr)/sizeof(mystruct);
for (int i = 0; i < elements; i++) {
// Do something hoping no overflow will ever occur
}
}
尼斯......但我想這可能是溢出容易。如果我將這個函數傳遞給我以「正常」方式創建的數組,則一切都應該很好:
mystruct array[20];
dosome(array);
沒問題。但是,如果我這樣做:
mystruct* array = (mystruct*)malloc(80*sizeof(mystruct));
dosome(array);
發生什麼??????????????????? 我想了解sizeof的行爲,這個函數是在編譯時評估的嗎?好的,當我不使用數組時,會發生什麼情況,但像那樣的數據塊非常麻煩?此外,我可以重新調用它,再次調用malloc,並要求再次處理該數據塊。它會起作用嗎? 我可以嘗試一下身體,但是我會得到一些有關sizeof行爲的確切答案。
謝謝。
在`dosome`,`的sizeof(ARR)`是`的sizeof(MYSTRUCT *)`不管如果你用C開發的功能被稱爲 – icecrime 2010-11-25 14:07:32
方式++,然後儘可能使用`new`而不是`malloc`。如果你像這樣定義你的數組,你的代碼仍然行爲不端:`mystruct * array = new mystruct [20];`? – suszterpatt 2010-11-25 14:10:07
icecrime是對的,你有錯誤的期望 – Simone 2010-11-25 14:10:20