cpp获取数组长度——sizeof()、size() 、strlen()、str.length()的区别

一、sizeof()

返回实际长度,即所占字节数,通过计算获取长度;

int型数组只可使用sizeof()获取长度.(vector可使用size()获取)

一维数组:

int list[] = { 2,4,1,3,5 };
int length = sizeof(list) / sizeof(list[0]);

二维数组:

int list2[][2] = { {2,4},{1,3},{5,0} };
int length2 = sizeof(list2) / sizeof(list2[0]);		//行数
int length3 = sizeof(list2) / sizeof(list2[0][0]);		//元素个数
int length4 = sizeof(list2[0]) / sizeof(list2[0][0]);		//每行元素个数

多维度以此类推。

二、size()和length()

返回字符串长度,不包括 “\0”;

size()函数是为了STL的兼容问题才出现的,所以size()可以用于vector容器;

length()在c语言中就有了,只能用于获取字符串长度;

size()与length()源码一致;

char类型数组不能使用size()、length(),只能使用strlen().

三、strlen()

返回字符串长度,参数只能为char*;

以“\0”为终止符,因此该char数组必须以''/0''结尾.

//from https://blog.csdn.net/hannea/article/details/25102727
char mail[100]="haha";
cout<< "strlen(mail): "<< strlen(mail)<<endl;
 
char *psd;
psd="lalala";
cout<< "strlen(psd): " << strlen(psd)<<endl;

四、总结

int型:arr.sizeof(),vector可以使用size();

char型:strlen(str),以“\0”为终止符;

string型:str.size()和str.length().

参考:

(16条消息) C/C++ strlen(str)和str.length()和str.size()的区别_Hannea007的博客-CSDN博客(16条消息) 1.27【日结】C/C++ strlen(str)和str.length()和str.size()的区别_从零开始的小栗子的博客-CSDN博客_str.legth不能用

C++中,判断数组长度通常有两种方法: ### 方法一:使用`sizeof`运算符 在C++中,可以利用`sizeof`关键字获取数组的字节数量。由于数组的大小等于其最后一个元素的地址与第一个元素的地址之差再减去数组的第一个元素的偏移量,对于基本数据类型的数组而言,这种方法直接返回的是该类型占内存的数量乘以数组的元素数。 ```cpp int arr[] = {0, 1, 2, 3}; int length = sizeof(arr) / sizeof(arr); ``` 在这个例子中,`arr`是一个整型数组,包含4个元素。`sizeof(arr)`返回整个数组占用的字节大小,即16(通常是)。`sizeof(arr)`返回单个整型元素占用的字节大小,通常是4。所以通过将数组总大小除以单个元素大小,我们得到了数组的长度4。 ### 方法二:使用指针计算 如果数组被声明为`const char *str`这样的形式,则可以直接通过指针加法来获取数组长度。 ```cpp const char str[] = "Hello World"; const char *end = str + sizeof(str); ``` 这里首先声明了一个常量字符指针`str`指向字符串"Hello World"。然后创建一个新的指针`end`,使得它指向字符串的结束位置。由于`str`本身就是数组名,因此`sizeof(str)`等同于得到`str`所指向数组的长度,而`str + sizeof(str)`则等价于指向下标为数组长度的位置,这个值就是字符串的结束标志`\0`的地址。因此,`end - str`就可以得到原始字符串的长度。 ### 相关问题: 1. **为什么不能直接访问数组的大小属性**?在C++中,数组并不是一个类实例,因此没有大小作为成员变量。`sizeof`运算符用于计算数组的大小。 2. **何时应该使用`sizeof`和何时使用指针计算数组长度**?当数组包含复杂类型如结构体、类或其他非简单类型时,应使用`sizeof`结合类型信息来计算数组长度;当数组由基本类型组成且不需要考虑类型大小差异时,使用指针计算更为直观简洁。 3. **如何处理动态分配的数组**?对动态分配的数组,可以使用`strlen()`函数(对于char*)或使用STL中的`std::vector`容器,它们提供自动管理大小的功能,不需要手动计算长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱桃小叮当

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值