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 关注
- 1947 浏览
添加回答
举报