关于sizeof(struct student)的问题
#include<stdio.h>struct student
{
int num[10];
char name[10];
int ave;
};
main()
{
int i;
i=sizeof(struct student);
printf("%d",i);
}
编了一个简单的测试代码,这里i的输出为什么是56啊我用的是linux gcc编译器
----------------解决方案--------------------------------------------------------
有问题吗?56在这里是这个结构占用内在单元的大小,而不是数组的长度。
----------------解决方案--------------------------------------------------------
我感觉是10+10+2=22啊!老谭的书里说是这么算,你说是怎么算的
----------------解决方案--------------------------------------------------------
你用什么编译器?TC下一个INT占两个字节,一个CHAR占一个字节,怎么会是10+10...呢??
----------------解决方案--------------------------------------------------------
回复:(学技术的)你用什么编译器?TC下一个INT占两个...
struct student{
int num[10]; //占4*10 = 40,内存分配40
char name[10]; //占1*10 = 10,但是根据对齐原则,内存会分配12
int ave; //占4*1 = 4 ,内存分配4
};
40 + 12 + 4 = 56
----------------解决方案--------------------------------------------------------
noah_shi,
一个int怎么会是4个字节呢?
----------------解决方案--------------------------------------------------------
这个和编译器有关。VC DEVCPP下都是4个的
----------------解决方案--------------------------------------------------------
我在我的Red Hat LINUX 9.0版本上运行了一下你的程序,
也是56.
我测试了一下sizeof(int)-->4 sizeof(char)--->1
----------------解决方案--------------------------------------------------------
#include<stdio.h>
struct student
{
int ave;
int av1;
};
int main()
{
int i;
i=sizeof(struct student);
printf("%d",i);
}
结果:8
#include<stdio.h>
struct student
{
char ave[10];
};
int main()
{
int i;
i=sizeof(struct student);
printf("%d",i);
}
结果:10
#include<stdio.h>
struct student
{
int ave[10];
};
int main()
{
int i;
i=sizeof(struct student);
printf("%d",i);
}
结果:40
我也不知道,为什么会多出2个字节.
----------------解决方案--------------------------------------------------------
楼上:为什么是56呢?要是那样的话应该是54啊!!
----------------解决方案--------------------------------------------------------