1
2 数组sizeof 不会蜕化为指针 ,但是如果数组作为函数的形参,数组名即为指针
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。这是一个依赖于编译系统的值。
1. sizeof(int);
2. sizeof(double);
3. sizeof(char);
4. sizeof(bool); // = 1
5. sizeof(short); //2
6. sizeof(float); // = 4
7. sizeof(long); // = 4
2 数组sizeof 不会蜕化为指针 ,但是如果数组作为函数的形参,数组名即为指针
char a1[] = "abc"; sizeof( a1 ); 3*sizeof(char)
int a2[3]; sizeof( a2 ); // 结果为3*sizeof(int)=12(依赖于int)
C99标准规定,函数、不能确定类型的表达式以及位域(bit-field)成员不能被计算sizeof值,即下面这些写法都是错误的:
sizeof(foo);//error
voidfoo2(){}
sizeof(foo2());//error
int a[];
int foo(a[]) //sizeof(a)==4
int a2[3]; sizeof( a2 ); // 结果为3*sizeof(int)=12(依赖于int)
C99标准规定,函数、不能确定类型的表达式以及位域(bit-field)成员不能被计算sizeof值,即下面这些写法都是错误的:
sizeof(foo);//error
voidfoo2(){}
sizeof(foo2());//error
int a[];
int foo(a[]) //sizeof(a)==4
charaa[10];cout<<strlen(aa)<<endl; //结果是不定的,因为未初始化,'\0'在内存中的位置不确定
sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。
3 平时默认对齐是8
#pragmapack(push)//将当前pack设置压栈保存
#pragmapack(2)//必须在结构体定义之前使用
structS1{charc;inti;}; //6
structS3{charc1;S1s;charc2;}; //10
#pragmapack(pop)//恢复先前的pack 设置
空结构体,空类,sizeof 都为1 单继承和多继承的空类所占内存都是1 但是虚继承涉及虚表(虚指针)都是4