一、靜態陣列。
比如 int int_ary[5] ,靜態陣列在編譯的時候就知道了陣列長度,這對編譯器來說挺好實現的。
用得最多的大概就是sizeof了吧:
#define countof_macro(x) (sizeof((x)) / sizeof(x)[0])
對於c++,可以用模板。
如果將陣列作為函式形參的話,它會退化成乙個指標,但是引用則不會。使用引用帶來的另外乙個問題就是,宣告引數時必須知道陣列長度——我要是知道我還費這勁幹啥?解決方法就是使用模板,將陣列引用的陣列大小宣告為模板引數:
//錯誤的做法:這裡形參已經退化為指標了
int countof_func_para(int int_ary[5])
//正確的做法
templateint countof_template(const int (&int_ary)[n])
二、動態陣列。
動態陣列的長度可以在執行時指定,所以編譯器也不知道它的長度。但是作業系統總該是知道的,不然釋放的時候就知道該釋放多少記憶體了。在vc中,提供了這樣的函式用來獲取由calloc,malloc, 或者realloc分配的記憶體的長度(bytes)。另,據說borland c和gcc也實現了這個函式。
size_t _msize(void *);
注意:若傳進去的指標不是指向堆裡的區域的話,debug版會有assertion failed。 C 獲取陣列長度
c c 中如何獲取陣列的長度?如何獲取陣列的長度 2010 12 15 20 49 c c 中如何獲取陣列的長度?收藏 c c 中沒有提供 直接獲取陣列長度的函式,對於存放字串的字元陣列提供了乙個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使 用sizeof ...
C 獲取陣列長度
對於字串陣列,使用strlen 函式來獲取字串陣列的長度。char a1 fwegweasdasdwqew cout strlen a1 endl 例如 int arr 可以用sizeof a sizeof a 0 來獲取陣列的長度。原理 sizeof 函式可以返回陣列所佔的記憶體,而sizeof ...
C語言獲取陣列長度
1 c語言中,定義陣列後可以用sizeof命令獲得陣列的長度 可容納元素個數 例如 double a int length length sizeof a sizeof a 0 陣列佔記憶體總空間,除以單個元素佔記憶體空間大小 printf length of a d length 輸出length...