C++獲取數組長度


一、靜態數組。

比如 int int_ary[5] ,靜態數組在編譯的時候就知道了數組長度,這對編譯器來說挺好實現的。

用得最多的大概就是sizeof了吧:

#define countof_macro(x) (sizeof((x)) / sizeof(x)[0])

對於C++,可以用模板。

如果將數組作為函數形參的話,它會退化成一個指針,但是引用則不會。使用引用帶來的另外一個問題就是,聲明參數時必須知道數組長度——我要是知道我還費這勁干啥?解決方法就是使用模板,將數組引用的數組大小聲明為模板參數:

//錯誤的做法:這里形參已經退化為指針了
int countof_func_para(int int_ary[5])
{
	return countof_macro(int_ary);
}

//正確的做法
template<size_t n>
int countof_template(const int (&int_ary)[N])
{
	return N;
}

二、動態數組。

動態數組的長度可以在運行時指定,所以編譯器也不知道它的長度。但是操作系統總該是知道的,不然釋放的時候就知道該釋放多少內存了。在VC中,提供了這樣的函數用來獲取由calloc, malloc, 或者 realloc分配的內存的長度(bytes)。另,據說Borland C和GCC也實現了這個函數。

size_t _msize(void *);

注意:若傳進去的指針不是指向堆里的區域的話,Debug版會有assertion failed。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM