首頁 >後端開發 >C++ >為什麼 C 函數中的陣列參數「sizeof()」會回傳意外結果?

為什麼 C 函數中的陣列參數「sizeof()」會回傳意外結果?

Susan Sarandon
Susan Sarandon原創
2024-11-11 07:31:02381瀏覽

Why Does `sizeof()` Return Unexpected Results for Array Parameters in C   Functions?

為什麼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 (&amp;arr)[N])
{
    return N;
}

在這種情況下,模板參數N 捕獲已知大小數組的大小,允許sizeof() 傳回正確的值。

以上是為什麼 C 函數中的陣列參數「sizeof()」會回傳意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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