这个答案为什么是20而不是18?(在visualC++)中运行!亟待解决!!!

[复制链接]
查看11 | 回复2 | 2010-8-18 11:11:45 | 显示全部楼层 |阅读模式
#include "stdio.h"
typedef struct student
{
char name[10];
int age;
float height;
}STU;
void main()
{
STU w;
printf("%d",sizeof(w));
}

回复

使用道具 举报

千问 | 2010-8-18 11:11:45 | 显示全部楼层
int和float是四个字节的,这个8个字节楼主没有异议了吧。char有点点特殊,如果只是sizeof(char)结果是1,但是struct student{ int age; //float height; char name;};这个结构体是8位。其实楼主只要测试一下char name[1...10],你就会发现一个规律,如果有int这些char可以隐式提升的类型的话,char一般是一次性分配四个字节,不够的时候再分,够用的时候就不再分了,所以struct student{ int age; float height; char name[5];};是16,char name[6]、[
回复

使用道具 举报

千问 | 2010-8-18 11:11:45 | 显示全部楼层
这是结构体的字节对齐问题,可以参见我的文章http://blog.sina.com.cn/s/blog_590be5290100g6hd.html在前面加上#pragma pack (1),则可使答案变为18。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行