首頁 >後端開發 >C++ >為什麼函數內部和外部的 C 數組的 sizeof() 會傳回不同的值?

為什麼函數內部和外部的 C 數組的 sizeof() 會傳回不同的值?

Barbara Streisand
Barbara Streisand原創
2024-12-21 16:47:09941瀏覽

Why Does `sizeof()` Return a Different Value for C Arrays Inside and Outside Functions?

C 陣列在函數內的誤導性 Sizeof()

在處理 C 陣列時,理解它們在傳遞給函數時的行為至關重要。這個問題揭示了函數內部和外部數組的 sizeof() 值之間的驚人差異。

問題:

在給定的C 程式中,陣列點為聲明了size 3,並且使用sizeof(point)/sizeof(point[0])正確獲取了其大小。但是,當同一個陣列傳遞給 test() 函數時,sizeof(arr) 會傳回錯誤值 2。

原因:

當陣列為傳遞給 C 中的函數時,它會衰減為指向其第一個元素的指標。因此,函數參數上的 sizeof() 測量的是指標的大小,而不是陣列本身。這會導致 test() 函數中出現錯誤的結果。

解:

要解決此問題,應將數組的大小作為單獨的參數傳遞到函數中:

void test(int arr[], size_t elems) {}

在在main()函數中,可以傳入陣列大小using:

test(point, sizeof(point) / sizeof(point[0]));

注意:

要注意的是,sizeof(point)/sizeof(point[0])計算不適用於動態分配數組,未在堆疊上分配。

以上是為什麼函數內部和外部的 C 數組的 sizeof() 會傳回不同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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