sizeof()、size()、strlen()总结

1、sizeof 与strlen的区别 
(1)sizeof是运算符,strlen是函数 
(2)sizeof操作符的结果类型是size_t(unsigned int),在头文件中的定义为 typedef unsigned int size_t; 
(3)sizeof可以用类型、函数做参数,strlen只能用char* 做参数,而且必须以’\0’结尾的。 
(4)大部分编译程序在编译时就把sizeof计算过了,用来计算类型或变量内存的大小,strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度。

2、C与C++关于sizeof的一点儿区别: 
C: 
sizeof(char) = 1 
sizeof(‘a’) = 4 
C++: 
sizeof(char) = 1 
sizeof(‘a’) = 1 
在C语言认为’a’是4字节,而C++语言认为’a’是1字节 
原因如下: 
C99标准的规定,’a’叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4字节。 
ISO C++标准规定,’a’叫做字符字面量(character literal),被看成是char型,所以占1字节。

3、字符串的size()函数返回字符串的长度,不包括结束符’\0’,也就是说:字符串的size()是表示字符串中真实有意义的字符的长度,结束符只是用于标记该字符串的结束,并无实际意义,所以不算在长度里面。

4、操作符sizeof(类型名 或 表达式)返回的是类型名所指定的类型或表达式的结果类型所占的字节数, 如:
sizeof(string)值为32; 
string s; 
sizeof(s)也是32; 
详细见参考资料2;

5、sizeof()用于数组的时候,返回的是数组在内存中占用的字节数(如果是字符数组,则包括结束符); 
用于其他变量或对象的时候,返回的是变量或对象所对应的数据类型在内存中占用字节长度; 
size() 是 std::string 类的一个成员函数,功能是 返回string对象内维护的字符串长度; 
成员函数size()返回的是元素个数,sizeof求的是占用内存的多少。

6、总结举例: 

string s = "abcd";
		int i1 = sizeof(s);
		cout << "i1: " << i1 << endl;  //16
		int i2 = sizeof("abcd");
		cout << "i2: " << i2 << endl;  //5 
		int i4 = s.length();
		cout << "i4: " << i4 << endl; //4
		int i5 = strlen("abcd");
		cout << "i5: " << i5 << endl; //4,不计算后面的’\0’
		int i6 = s.size();
        cout << "i6: " << i6 << endl; //4,s.length()和s.size()功能一样
		system("pause");

参考资料: 
1、C/C++总结(sizeof、size_t) 
2、字符串的size()和sizeof() 
3、百度百科:sizeof

整改自:http://blog.csdn.net/jiejinquanil/article/details/50986010

猜你喜欢

转载自blog.csdn.net/gordennizaicunzai/article/details/79450708