猿问

如下在VC6.0运行后出来是40 ,不应该是10+20+1+4+4=39吗?求指教

char* ss = "0123456789";
sizeof(ss) 结果 4 为啥??
struct example
{
char id[10];
char name[20];
char sex;
int age;
union
{
float salary;
float score;
};
}teacher,student;
void main()
{
example teacher={"000788","WangWei",'M',30,5000};
example student={"000518","ZhangYu",'F',20,95};
cout<<teacher.id<<" "<<teacher.name<<" "<<teacher.sex
<<" "<<teacher.age<<" "<<teacher.salary<<endl;
cout<<student.id<<" "<<student.name<<" "<<student.sex
<<" "<<student.age<<" "<<student.score<<endl;
cout<<"sizeofstudent="<<sizeof(student)<<endl; //40
cout<<"sizeofteacher="<<sizeof(teacher)<<endl; //40 试了 运行出来是40 怎么得的??
第一个问题明白了 指针是4字节 后面这一小段程序(跟头一个问题没关系) 

MMTTMM
浏览 119回答 3
3回答

素胚勾勒不出你

指针4字节这个你知道了,如果是声名成字符串数组sizeof可以得到字符串长度。你算的倒是没错,是39。不过VC的sizeof运算符在计算class、struct和union类型的时候,会把对齐用的填充字节也算进去。默认是按4字节(word)对齐,所以其结果一定可以被4整除,最小的符合这个要求的尺寸就是40,实际上就是有一个字节用作填充了。不过可以把对齐设置成按1字节,这样就能得到准确的尺寸了,在项目属性页里面的配置属性 -> c/c++ -> 命令行配置中,增加附加选项/Zp1就可以的到正确的39了。

慕无忌1623718

指针都是4个字节,如果char ss[100]="0123456789",sizeof(ss)还是4,因为数组就是指针字符串长度用strlen(char *)函数。

Qyouu

char* ss = "0123456789";说明ss是一个字符类型指针,是4个字节指针只与机器有关. 如果你的机器是16位寻址的, 那指针就是16位的, 如果是32位寻址的, 指针也是32位的,即4字节后来那个sizeof(teacher)不是一个指针,它的大小与你的结构体大小有关。比如一个整型4个字节,浮点数6个字节,字符型1个字节,这是因编译器而异的。注意,同位体同算一段,加起来就行
随时随地看视频慕课网APP
我要回答