Henry-Roamer

C++数组长度 以及sizeof(), size(), length(), strlen()

c++中没有求数组长度的默认函数,只能自己写,但经常有初学者把sizeof(), size(), length(), strlen() 混淆掉。本篇博文具体解释一下如何求数组长度和这四个函数,以及可能遇到的问题。


C++求数组长度为:

int arr_length = sizeof(arr) / sizeof(arr[0]);

为了方便使用,在C语言中常定义宏来求数组长度

#define ARR_LEN(array, length){ length =  sizeof(array) / sizeof(array[0]); }

使用时,直接调用宏函数即可,如

int arr[]={1,2,3,4,5};

int len;

ARR_LEN(arr, len);  //此时len赋值为5

在C++中,也可以定义模板函数

template <class T>

int getArrayLen(T &array){

return sizeof(array) / sizeof(array[0]);

}

使用时,调用模板函数,如

string arr[]={"abc", "ab", "abcde", "1234567", "890"};

int len=getArrayLen(arr);  //此时len赋值为5


//  **************************  注意!!!!********************************  //

当数组传入函数时,传入的是指针,指针仅指向数组头arr[0],不带有任何长度信息,所以在传入数组时,要把数组长度同时传入函数。

可以考虑一下,下面这个函数调用时,会输出什么?

void length_array(int arr[]){ 

int len=getArrayLen(arr);

cout<<"len="<<len<<", sizeof(arr)=" << sizeof(arr)<<endl;

}

Output: len=1, sizeof(arr)=4;

这是因为arr是指针,而指针所占空间是4个字节,所以sizeof(arr)/sizeof(arr[0])=1.

//  ****************************************************************************************

请牢记:如果把数组作为参数传入函数,那么这个数组会退化为一个指针 int *arr

 ****************************************************************************************  //


下面说一下size(), length(), strlen()

先说 size() 和 length(),这两个方法都要先 include <string>,两者使用起来无任何差别。

即,str.size() == str.length() 为真

引用cplusplus.com中的话:

Both string::size and string::length are synonyms and return the same value, which is the length of the string, in terms of bytes.

而 strlen() 是<cstring>中的,是C语言的遗留物。

引用cplusplus.com中的话:

cstring::strlen returns the length of the C string str. In C++, char_traits::length implements the same behavior. 

即 strlen(str) == str.length() == str.size() 为真


参考文献及资料

https://www.cplusplus.com

https://blog.csdn.net/bopzhou/article/details/6063163

评论(2)

热度(9)

  1. 共1人收藏了此文字
只展示最近三个月数据