C++擷取數組長度!

來源:互聯網
上載者:User

標籤:

一、靜態數組。

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

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

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

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

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

123456789101112 //錯誤的做法:這裡形參已經退化為指標了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中,提供了這樣的函數用來擷取由callocmalloc, 或者 realloc分配的記憶體的長度(bytes)。另,據說Borland C和GCC也實現了這個函數。

1 size_t _msize(void *);

注意:若傳進去的指標不是指向堆裡的地區的話,Debug版會有assertion failed。

C++擷取數組長度!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.