关于size和sizeof的区别是什么?

2024-11-24 15:44:58
推荐回答(3个)
回答1:

在c++中size()和sizeof()用法说明:
1、size()是取字符串长度的,跟length()用法相同。
举例:

string str="0123456789";
cout <<"str.length()="<cout <<"str.size()="<为了兼容,这两个函数一样。 length()是因为沿用C语言的习惯而保留下来的,string类最初只有length(),引入STL之后,为了兼容又加入了size(),它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。 string类的size()/length()方法返回的是字节数,不管是否有汉字。
2、sizeof
sizeof(...)是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。
举例说明:
1)char* ss = "0123456789";
sizeof(ss)为4,ss是指向字符串常量的字符指针,sizeof 获得的是指针所占的空间,则为4
sizeof(*ss)为1,*ss是第一个char字符,则为1。

回答2:

我们能常在用到 sizeof 和 strlen 的时候,通常是计算字符串数组的长度
从这个例子可以看得很清楚:har str[11]="0123456789";//注意这里str大小因该大于等于11,应考虑'\0'在内,否则编译器会报错
int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。
int b=sizeof(str); //而b=11; >>>> sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小,不受里面存储的内容改变。
打字不易,如满意,望采纳。

回答3:

sizeof返回的是对象占用内存的字节数
而a.size()是string类定义的一个返回字符串大小的函数
两个是完全不一样的概念

你可以试一下

int main()
{
string a=“abcdefg”;
cout< cout< return 0;
}

sizeof(a)返回值还是一样的,是cstirng类占据内存的大小
而a.size()会返回字符串的长度