3 回答
TA貢獻1785條經驗 獲得超4個贊
1. 算術表達式:
1 2 3 4 5 6 | #include <iostream>
int main() { int arr[4]; std::cout << sizeof( arr ) / sizeof( arr[0] ) << std::endl; // 輸出4 } |
或者
1 2 3 4 5 6 | #include <iostream>
int main() { int arr[4]; std::cout << sizeof( arr ) / sizeof( *arr ) << std::endl; // 輸出4 } |
2. 函數模板參數自動推斷:
1 2 3 4 5 6 7 8 9 10 11 | #include <iostream>
template <typename T, size_t N> inline size_t Count( T ( & arr )[N] ) { return N; }
int main() { int arr[4]; std::cout << Count( arr ) << std::endl; // 輸出4 } |
3.標準C++模板庫:
1 2 3 4 5 6 7 | #include <type_traits> // 注意包含此頭文件. #include <iostream>
int main() { int arr[4]; std::cout << std::extent<decltype( arr ), 0>::value << std::endl; // 輸出4 } |
4.模板特化與自動類型推斷:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | include <iostream> template <typename T> class ComputeSize;
template <typename T, size_t N> class ComputeSize<T[N]> { public: static const size_t value = N; };
int main() { int arr[4]; std::cout << ComputeSize<decltype( arr )>::value << std::endl; // 輸出4 } |
1 2 3 4 5 6 7 | #include <cstdlib> #include <iostream>
int main() { int arr[4]; std::cout << _countof( arr ) << std::endl; // 輸出4. } |
6. boost庫:
1 2 3 4 5 6 7 | #include "boost/range.hpp" #include <iostream>
int main(){ int arr[4]; std::cout << boost::size( arr ) << std::endl; // 輸出4 } |
上面的方法適用于靜態數組,動態的數組(new[])是無法獲取元素個數的。
上面的代碼,自己可以編譯運行看看,如果手上沒有編譯器測試上面的代碼或者編譯失敗,可以在下面的頁面上編譯運行(最新版本的Visual C++):
TA貢獻1818條經驗 獲得超3個贊
方法:
使用sizeof(array) / sizeof(array[0]), 在C語言中習慣上,在使用時都把它定義成一個宏。
比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。而在C++中則可以使用模板技術定義一個函數。
比如:template <class T>intgetArrayLen(T& array){return (sizeof(array) / sizeof(array[0]));}
這樣對于不同類型的數 組都可以使用這個宏或者這個函數來獲取數組的長度了。
基礎語法
1、C語言數據類型
C的數據類型包括:整型、字符型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。
2、常量與變量
常量其值不可改變,符號常量名通常用大寫。
變量是以某標識符為名字,其值可以改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字符必須為字母或下劃線,否則為不合法的變量名。變量在編譯時為其分配相應存儲單元。
- 3 回答
- 0 關注
- 2003 瀏覽
添加回答
舉報
