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

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

Barbara Streisand
發布: 2024-12-21 16:47:09
原創
871 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板