sizeof
1 指针全都是4。
char* p = "0123456789"; sizeof(p) = 4;
char*p = new char[100]; sizeof(p) = 4;
2 数组要看个数跟实际内容。
char p[] = "0123456789"; sizeof(p) = 11;
char p[100] = "0123456789"; sizeof(p) = 100;
3 考虑内存对齐。
struct p
{ long x;
short y;
}
sizeof(p) = 8;
4 类
class p {}; sizeof(p) = 1; //空类为1
class p {int x; static int y}; sizeof(p) = 4; //静态变量在全局数据区,不计。
class p {virtual fun();}; sizeof(p) = 4; //类中有虚函数指针。
4 sizeof跟strlen的区别
1>sizeof是操作符,strlen是字符串函数,
2>sizeof可以用类型做参数,函数体做参数,strlen只能用char*做参数,且必须是以"\0"结尾的,
3>数组做sizeof的参数不退化,传递给strlen就退化为指针。
4>sizeof后如果是类型必须加括号,如果是变量名可以不加括号,这是因为sizeof是个操作符而不是个函数。
5 位域
struct tTest
{
int i:2;
int j:1;
};
tTest tt; int n = sizeof tt; // n = 4;