首頁 > 後端開發 > C++ > 為什麼在 C 中將陣列傳遞給函數時 sizeof() 的行為不同?

為什麼在 C 中將陣列傳遞給函數時 sizeof() 的行為不同?

Barbara Streisand
發布: 2024-11-11 17:56:03
原創
1054 人瀏覽過

Why Does sizeof() Behave Differently When Passing Arrays to Functions in C  ?

將陣列傳遞給C 中的函數時的sizeof() 異常

在C 中,sizeof() 運算子在處理數組時的行為有所不同傳遞給函數的值比在主函數中使用時的值高。這種差異可能會讓初學者感到困惑。

正確的數組傳遞

要正確地將數組傳遞給函數,必須使用引用傳遞它語法:

int length_of_array(int (&arr)[N]);
登入後複製

其中:

  • arr 是傳遞給函數的陣列。
  • N 是一個整數常數,表示陣列的大小。

使用Sizeof()在函數中

在函數中使用sizeof() 時,下列情況成立:

sizeof(arr) == N * sizeof(int);
登入後複製

解釋:

  • sizeof(arr) 傳回分配給陣列的總記憶體大小,它是每個元素大小的N 倍(sizeof(int)).

陣列傳遞不正確的問題

在提供的程式碼片段中,函數length_of_array()無意中透過指標傳遞數組,像這樣:

int length_of_array(int some_list[]);
登入後複製

這種不正確的傳遞方法會導致以下問題:

  • sizeof(some_list)傳回指向數組中第一個元素的指標的大小。
  • sizeof(*some_list) 傳回 a 的大小數組中的單一元素。
  • 無論實際數組如何,這些值的除法始終結果為1

使用模板的解決方法

要克服這一限制,可以使用基於模板的方法,如下所示:

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    std::cout << N << std::endl; // Will output the correct array size
    return N;
}
登入後複製

重點:

兩種方法的本質差異在於透過引用傳遞陣列與透過指標傳遞陣列。前者保留了數組大小的信息,而後者則不然。

以上是為什麼在 C 中將陣列傳遞給函數時 sizeof() 的行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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