sizeof 和 strlen

sizeof

1.sizeof 是运算符,返回一个对象或者类型所占的内存字节数,其值在编译时即计算好了。

2.sizeof 有三种语法形式,如下:

  • •sizeof( object );       // sizeof( 对象 )
  • • sizeof( type_name );     // sizeof( 类型 );
  • •sizeof object;       // sizeof 对象;

3.sizeof 不能用来运算函数类型,不完整类型,位域类型。

4.如果运算对象是引用类型,那么实际运算的是所引用的类型。

5.用sizeof对类名操作,得到的结果是该类的对象在存储器中所占据的字节大小,由于静态成员变量不在对象中存储,因此这个结果等于各非静态数据成员(不包括成员函数)的总和加上编译器额外增加的字节。后者依赖于不同的编译器实现,C++标准对此不做任何保证。

6.C++标准规定类的大小不为0,sizeof 空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1。 如果在类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针指向虚函数表VTable,在32位机器上,一个对象会增加4个字节来存储此指针,它是实现面向对象中多态的关键。而虚函数本身和其他成员函数一样,是不占用对象的空间的。

7.如果运算对象是一个表达式,sizeof不会去求表达式的值,而是计算所返回的静态类型的大小。另外左右值转换,数组名指针转换,函数名指针转换都不会发生。

strlen

 1.strlen() 是函数,返回以 ‘’结尾的 C String的长度(不包含 ‘’ ,注意 sizeof 是包括的),必须在运行时才能计算。

char str[10] = "123";
int i = sizeof(str);       // i = 10;
i = strlen(str);           // i = 3 
原文地址:https://www.cnblogs.com/zoneofmine/p/8270580.html