確定傳遞函數中的數組大小
問題出現在C 中,其中確定傳遞給函數的數組的大小會導致由於sizeof無法準確捕捉數組的長度,這是一個挑戰。
一個流行的解決方案建議當數組元素 array[i] 達到 NULL 時終止循環。但是,這種方法可能會導致錯誤,因為 array[i] 有時在陣列末尾附近包含隨機垃圾值。
具有數組引用的基於模板的解決方案
C 透過模板和數組引用提供了更可靠的解決方案:
template <typename T, int N> void func(T (&a)[N]) { for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements }
這個基於模板的函數採用T 類型的陣列a 和N 的固定大小。透過使用引用運算子 &,它將原始數組綁定到 a,允許在不明確傳遞大小的情況下存取數組的元素。
要使用此函數,只需聲明一個數組並傳遞通過引用:
int x[10]; func(x);
需要注意的是,此解決方案僅適用於數組,而不是指針。對於基於指標的數組,更好的選擇是使用標準模板庫 (STL) 容器 std::vector,它提供大小和元素存取功能。
以上是如何可靠地確定傳遞給 C 函數的陣列的大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!