sizeof()与strlen()
准确的说,sizeof()是对象占用的空间大小;strlen()是字符串的长度,即包含的字符数。
在c++中的string类,s.size() s.length()二者是一样的。
但是如果用字符数组就会有区别:
char a[100]="hello";
sizeof(a)=100; strlen(a)=5.
char a[]="hello"; char *str="hello";
sizeof(a)=6; strlen(a)=5;
sizeof(str)=4; strlen(str)=5;
sizeof()用于数据类型或已定义的变量(返回字节数)。
在32位机器中,各类型所占长度(字节):int (4), char (1), long (4), long long(8),double (8).
结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。例如:
struct ss{
char b;
double x;} a;
sizeof(a)=12.//而一般sizeof(char)+ sizeof(double)=1+8=9.
这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员要放在被4整除的地址。
当操作数具有数组类型时,其结果是数组的总字节数。如
int a[2];
sizeof(a)=sizeof(int)*2=8.
当操作数是指针时,sizeof依赖编译器。在Microsoft c/c++中,near类指针字节数为 2,far、huge类指针字节数为 4.