為什麼sizeof() 對於C 函數中的陣列參數的作用不同
在C 中,數組在傳遞給函數,使得使用sizeof() 來確定數組大小不可靠。為了理解這一點,我們來分析以下函數:
int length_of_array(int some_list[]) { return sizeof(some_list) / sizeof(*some_list); }
數組參數的問題
參數some_list 被宣告為數組,但函數簽名為實際上相當於int length_of_array(int* some_list)。這是因為數組在函數參數中衰減為指標。
對 sizeof() 的影響
在此上下文中使用 sizeof(some_list) 計算指標的大小,結果值為 1。除以sizeof(*some_list) (整數的大小)得到1.
範例
在給定的範例中,儘管陣列num_list 包含15 個元素,但函數length_of_array() 總是回傳1,如輸出所示:
This is the output from direct coding in the int main function: 15 This is the length of the array determined by the length_of_array function: 1
使用模板的解決方案函數
要確定函數中的陣列大小,可以使用模板函數並透過引用傳遞數組:
template<size_t N> int length_of_array(int (&arr)[N]) { return N; }
在這種情況下,模板參數N 捕獲已知大小數組的大小,允許sizeof() 傳回正確的值。
以上是為什麼 C 函數中的陣列參數「sizeof()」會回傳意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!