c 求陣列大小

2021-06-21 05:09:31 字數 737 閱讀 5985

每次看到c++的奇技淫巧都覺得這門語言過於複雜龐大,可有時會忍不住去學習,今天學到乙個c++判斷陣列大小,寫下做紀念

在c中判斷陣列大小經常用 #define num(x) sizeof(x)/sizeof(0[x])注意這裡用0[x]作用是防止自定義型別計算,但我們用乙個指標指向乙個陣列時。比如int a[2];int *p=a;

num(p) 計算會得到1,但這不是我們要的結果,既然不是我們要的結果,我們應該最好報錯在編譯期。

#include#include#define num(x) sizeof(x)/sizeof(0[x])

templatestruct array_size_struct

;templatearray_size_structstatic_size_fn(t (&)[n]);

#define cppnum(x) sizeof(static_size_fn(x).c)

int main()

在這裡static_size_fn只是宣告,所以不存在任何執行期開銷,t(&)[n]是乙個t型別陣列的引用,返回乙個結構體,同時把n寫入到c陣列,這樣sizeof(static_size_fn(x).c)

相當於sizeof(c)。而當傳入指標時候編譯器會報錯, error c2784: 「array_size_structstatic_size_fn(t (&)[n])」: 未能從「char *」為「t (&)[n]」推導 模板 引數。

求陣列中第n大(小)的元素

使用快速排序進行查詢,類似於二分查詢的意思,因為每次都會有乙個元素找到適當位置,該位置就是這個元素在陣列中的排列順序。每次partition會返回乙個陣列下標,將該陣列下標的元素和待查詢的值進行比較,如果相等,直接返回,如果大於,取partition操作後的右一側,反之,取左一側。利用快速排序進行查...

C 求陣列長度

c c 中沒有提供直接獲取陣列長度的函式,對於存放字串的字元陣列提供了乙個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使用sizeof array sizeof array 0 在c語言中習慣上在 使用時都把它定義成乙個巨集,比如 define get arr...

c語言求陣列長度

c語言對於不同的資料型別的陣列求長度方式稍微有不同的地方 第一種使用strlen strlen 本質上是求位元組的個數,所以當有中文字元 占用位元組一般不為1 時,會產生差錯,而英文本元都是占用乙個直接,求位元組相當於求字元 include include intmain 輸出 第二種使用sizeo...