將陣列傳遞給C 中的函數時的sizeof() 異常
在C 中,sizeof() 運算子在處理數組時的行為有所不同傳遞給函數的值比在主函數中使用時的值高。這種差異可能會讓初學者感到困惑。
正確的數組傳遞
要正確地將數組傳遞給函數,必須使用引用傳遞它語法:
int length_of_array(int (&arr)[N]);
其中:
使用Sizeof()在函數中
在函數中使用sizeof() 時,下列情況成立:
sizeof(arr) == N * sizeof(int);
解釋:
陣列傳遞不正確的問題
在提供的程式碼片段中,函數length_of_array()無意中透過指標傳遞數組,像這樣:
int length_of_array(int some_list[]);
這種不正確的傳遞方法會導致以下問題:
使用模板的解決方法
要克服這一限制,可以使用基於模板的方法,如下所示:
template<size_t N> int length_of_array(int (&arr)[N]) { std::cout << N << std::endl; // Will output the correct array size return N; }
重點:
兩種方法的本質差異在於透過引用傳遞陣列與透過指標傳遞陣列。前者保留了數組大小的信息,而後者則不然。
以上是為什麼在 C 中將陣列傳遞給函數時 sizeof() 的行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!