C、C++中没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?
其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在使用时都把它定义成一个宏,比如
#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}
而在C++中则可以使用模板技术定义一个函数,比如:
template <class T>
int getArrayLen(T& array)
{
return (sizeof(array) / sizeof(array[0]));
}
还有一种看起来比较高级的做法:
template<typename T,size_t N>
void print_length(T (&m)[N])
{
std::cout<<"the length of array is "<<N<<std::endl;
}
使用sizeof(array)/sizeof(array[0]) 是比较直接的做法, 用总的长度除以单个元素长度就得到长度
后一种方法看起来更高级一点,应该是有编译器在实例化模板函数时隐式的使用了直接的做法,得出了数组的长度
只要知道数组名(首地址)和元素类型就可以知道数组长度。