一. sizeof的含义以及用法
作用:返回一个对象(普通对象或类型实例化)或类型名(结构体或类类型名)的长度(占用内存的大小)。返回值类型为size_t,单位为字节。
语法形式:
sizeof (type name); sizeof (expr); sizeof expr;
使用sizeof的结果会依赖于expr的类型:
- 对普通对象,会返回其所占用的内存大小,比如32位机器上,char(1 byte),short(2 byte),int(4 byte),long(4 byte),long long(8 byte),float(4 byte),double(8 byte);对引用类型,同样也会返回其所占用的内存大小;
- 对指针类型,会返回存放地址值所需的内存大小,比如32位机器上,地址长度为32位,即4 byte;注意,如果我们要取得指针指向对象占用内存大小,则要对该指针解引用(*);
- 对数组类型,会返回单个数组元素占用内存大小乘上数组元素个数,即该数组所占用的内存大小;所以一般我们可以通过sizeof(array)/sizeof(*array)来求出数组元素的元素个数。
二. strlen的含义以及用法
作用:返回字符串的长度,计算方式为从字符串中的第一个字符开始,直到第一次遇到空字符(‘\0’)。
语法形式:std::size_t strlen( const char* str );
三. 二者的对比
对于字符串类型对象,返回值差别:
- sizeof返回该字符串占用内存的全部长度,还包括了结尾符(空字符,'\0'),而strlen的计算则不包含空字符,故而一般sizeof返回的值比strlen返回的值大1。