sizeof和strlen的区别
1、sizeof是运算符,而strlen是函数。
2、sizeof只能用类型做参数,strlen只能用char * 做参数,而且必须以‘\0’结尾。
3、数组在sizeof上不退化,而在strlen会退化为指针。
4、大部分编译程序在编译的时候就把sizeof计算过,是类型或者变量的长度。
5、Strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度。
6、Sizeof不返回静态变量分配的空间,
7、计算结构体变量时必须考虑数据对齐问题,输的CPU读取快。Sizeof不计算结构体的函数空间。
8、Sizeof不能用于函数类型,不完全类型——未知大小数据的,未知内容的,void等,和位字段。
class A
{
int a;
short b;
static int d;
void fun()
{
return ;
};
};
cout<<sizeof(A)<<endl;//8,只计算short和int的值
cout<<sizeof(new A())<<endl;//4相当于指针
cout<<sizeof(new A())<<endl;//4相当于指针
class A
{
};
{
};
cout<<sizeof(A)<<endl;//1
cout<<sizeof(new A())<<endl;//4
类的实例化就是在内存中分配一块地址.(空类同样可以被实例化),每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.