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