C 函式中獲取輸入的靜態陣列長度

2021-10-20 19:45:49 字數 1293 閱讀 3118

假設有這麼一種情況:程式中定義了乙個靜態陣列,然後將這個陣列作為引數傳遞給某個函式,如何在該函式中確定陣列長度呢?

int arr=

;f(arr)

;// 如何在函式 f() 中確定 arr 的長度?

c 語言中遇到這種情況,一般是直接將陣列長度作為引數傳遞給f():

voidf(

int*arr,

int n)

int arr=

;f(arr,5)

;

如果 arr 是動態陣列,在 c++ 中確實也只能這麼做。但對於靜態陣列就完全沒必要了,因為 arr 中本身就保留了其長度資訊。

c++ 中可以利用模板函式獲取靜態陣列引數長度,具體寫法為:

template

<

typename t, size_t n>

void

f(t (

&vals)

[n])

int arr=

;f(arr)

;// t, n 分別被解析為 int, 5

還可以這麼寫:

template

<

typename t>

void

f(t& arr)

int arr=

;f(arr)

;// t 被解析為 int[5]

這裡std::end(arr) - std::begin(arr)可以寫成std::size(arr)(需要 c++17 標準),但不應該寫成sizeof(arr) / sizeof(arr[0]),因為當輸入陣列長度為0時 (異常情況,c++ 不應當出現長度為0的靜態陣列),其它寫法會在編譯期間報錯,而sizeof的寫法則不會。

在 stl 標頭檔案range_access.h可以看到std::size()的實現:

/**

* @brief return the size of an array.

*/template

<

typename _tp, size_t _nm>

constexpr size_t

size

(const _tp (&)

[_nm]

)noexcept

C 獲取陣列長度

c c 中如何獲取陣列的長度?如何獲取陣列的長度 2010 12 15 20 49 c c 中如何獲取陣列的長度?收藏 c c 中沒有提供 直接獲取陣列長度的函式,對於存放字串的字元陣列提供了乙個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使 用sizeof ...

C 獲取陣列長度

一 靜態陣列。比如 int int ary 5 靜態陣列在編譯的時候就知道了陣列長度,這對編譯器來說挺好實現的。用得最多的大概就是sizeof了吧 define countof macro x sizeof x sizeof x 0 對於c 可以用模板。如果將陣列作為函式形參的話,它會退化成乙個指標...

C 獲取陣列長度

對於字串陣列,使用strlen 函式來獲取字串陣列的長度。char a1 fwegweasdasdwqew cout strlen a1 endl 例如 int arr 可以用sizeof a sizeof a 0 來獲取陣列的長度。原理 sizeof 函式可以返回陣列所佔的記憶體,而sizeof ...