...num[6];int s[4];double ave;}a,*p;变量a在内存中所占字节数是多少...

发布网友

我来回答

5个回答

热心网友

答案是32个字节。22是错的,请其他答者了解一下结构体内存对齐原则。
根据结构体内存对齐原则:
{结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)}
我们可以进行如下计算
首先放入char型 这样占去6个字节
之后开始放入int型 如今32位位int一般情况占4位,但存储时必须为其位数整数倍,即:必须从0,4,8,12...等开始存储,因为前面char占去6位,那么int从第八字节开始存 占去4*4=16字节
之后存入double 其为8字节,应该存储在
0,8,16,24....这些位置。因为之前8+16=24;所以刚好从这里开始存,则结果为24+8=32字节。
这个问题已经有些时间了,我也没有指望能给我采纳,我只希望后来的人(应该是大学生并且多半是从题库刷到的吧)能了解到为什么是32位。

热心网友

首先要看你的芯片是多少位的32位的话,char num[6] 占6个字节但是要涉及到4字节对齐,所以它占8字节, int s[4]占4*4个字节即16个字节,double ave 占8个字节,所以总共是32个字节

热心网友

32
我调试了的 这是正确答案
这是要根据对齐基数来算的
char六个字节,
而s是16,所以取8为对齐基数,
最后是4*8=32

热心网友

30个字节吧,char 类型对应一个字节,因此char num[6]是6个字节,int类型对应4个字节,因此int s[4]是4*4=16个字节,double类型是8的字节
因此是6+16+8=30

热心网友

光是double就8字节了,int就算是2字节,s[4]也有8字节啊,怎么可能14。
考虑到数据对齐,答案是num[6]占6字节,然后空2字节,s[4]占8字节,double8字节,总共24字节。

热心网友

答案是32个字节。22是错的,请其他答者了解一下结构体内存对齐原则。
根据结构体内存对齐原则:
{结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)}
我们可以进行如下计算
首先放入char型 这样占去6个字节
之后开始放入int型 如今32位位int一般情况占4位,但存储时必须为其位数整数倍,即:必须从0,4,8,12...等开始存储,因为前面char占去6位,那么int从第八字节开始存 占去4*4=16字节
之后存入double 其为8字节,应该存储在
0,8,16,24....这些位置。因为之前8+16=24;所以刚好从这里开始存,则结果为24+8=32字节。
这个问题已经有些时间了,我也没有指望能给我采纳,我只希望后来的人(应该是大学生并且多半是从题库刷到的吧)能了解到为什么是32位。

热心网友

32
我调试了的 这是正确答案
这是要根据对齐基数来算的
char六个字节,
而s是16,所以取8为对齐基数,
最后是4*8=32

热心网友

30个字节吧,char 类型对应一个字节,因此char num[6]是6个字节,int类型对应4个字节,因此int s[4]是4*4=16个字节,double类型是8的字节
因此是6+16+8=30

热心网友

首先要看你的芯片是多少位的32位的话,char num[6] 占6个字节但是要涉及到4字节对齐,所以它占8字节, int s[4]占4*4个字节即16个字节,double ave 占8个字节,所以总共是32个字节

热心网友

光是double就8字节了,int就算是2字节,s[4]也有8字节啊,怎么可能14。
考虑到数据对齐,答案是num[6]占6字节,然后空2字节,s[4]占8字节,double8字节,总共24字节。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com