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; //40cout<<"sizeofteacher="<<sizeof(teacher)<<endl; //40 试了 运行出来是40 怎么得的??第一个问题明白了 指针是4字节 后面这一小段程序(跟头一个问题没关系)
3 回答

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

慕无忌1623718
TA贡献1744条经验 获得超4个赞
指针都是4个字节,
如果char ss[100]="0123456789",sizeof(ss)还是4,因为数组就是指针
字符串长度用strlen(char *)函数。

Qyouu
TA贡献1786条经验 获得超11个赞
char* ss = "0123456789";
说明ss是一个字符类型指针,是4个字节
指针只与机器有关. 如果你的机器是16位寻址的, 那指针就是16位的, 如果是32位寻址的, 指针也是32位的,即4字节
后来那个sizeof(teacher)不是一个指针,它的大小与你的结构体大小有关。比如一个整型4个字节,浮点数6个字节,字符型1个字节,这是因编译器而异的。注意,同位体同算一段,加起来就行
- 3 回答
- 0 关注
- 118 浏览
添加回答
举报
0/150
提交
取消