當sizeof() 在陣列參數的函數中表現不同時
在C 中,將陣列傳遞給函數時,必須了解為什麼sizeof() 的運作方式可能與在main 函數中使用時不同。
陣列衰減到指標
與 Java 等語言不同,其中陣列是具有方法的真正物件和屬性一樣,在 C 中,陣列只是指標。當數組作為參數傳遞給函數時,它會衰減為指向數組第一個元素的指標。
指標與陣列上的sizeof()
在主函數中,套用於陣列的sizeof() 傳回陣列的總大小(以位元組為單位) ,包括其所有元素。然而,當 sizeof() 用於函數內指向數組的衰減指標時,它會傳回指標本身的大小,通常是整數類型的大小(例如 sizeof(int))。
確定陣列大小的解法
要確定已衰減為指標的陣列的大小,可以使用folgende 程式碼:
int length_of_array(int* some_list) { // Not applicable here, but see below for when it might be return 0; }
例外:透過引用傳遞陣列
陣列衰減規則有一個例外。數組還可以透過引用傳遞,從而允許存取其大小資訊。其語法為:
template<size_t N> int length_of_array(int (&arr)[N]) { // Size of the array can be determined via the template parameter N return N; }
在這種情況下,N 表示傳遞的陣列的大小,它可以用來準確地確定陣列的長度。
以上是為什麼 C 函數中的陣列參數 `sizeof()` 表現不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!