首頁 >後端開發 >C++ >為什麼 C 函數中的陣列參數 `sizeof()` 表現不同?

為什麼 C 函數中的陣列參數 `sizeof()` 表現不同?

Barbara Streisand
Barbara Streisand原創
2024-11-12 01:35:02880瀏覽

Why Does `sizeof()` Behave Differently for Array Arguments in C   Functions?

當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 (&amp;arr)[N])
{
    // Size of the array can be determined via the template parameter N
    
    return N;
}

在這種情況下,N 表示傳遞的陣列的大小,它可以用來準確地確定陣列的長度。

以上是為什麼 C 函數中的陣列參數 `sizeof()` 表現不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn