c语言题目求详细解释

17题最长的不应该是char【10】吗长度为10,字节也最长吗,double最长8,为什么选第四个12题a【0】的地址3000跟字节数有什么关系9题s【1】的值为0吗... 17题最长的不应该是char【10】吗长度为10,字节也最长吗,double最长8,为什么选第四个
12题a【0】的地址3000跟字节数有什么关系
9题s【1】的值为0吗
展开
 我来答
庄政警
2019-06-28 · TA获得超过9916个赞
知道大有可为答主
回答量:1113
采纳率:94%
帮助的人:853万
展开全部
在c语言里,结构体在内存中存放时要遵从这样的规则:
1:每个成员的相对于整个结构体起始地址的偏移值必须是该成员长度的整数倍
2:整个结构体的长度必须是最长的元素的整数倍
现在看
{ int i; //占4个字节
char ch[10]; //这个以char为单位 10个字节
double f; // 参照规则1,因为14不是8的倍数 ,所以从16字节开始
}
整体是24,是最长元素8的倍数 ,符合规则2 ,于是长度就是24 就是选项D
如果换个次序变成下面这样,就是32个字节了
{ int i; //占4个字节
double f; //参照规则1,4不是8的倍数,所以从8开始 16结束
char ch[10]; //10个字节 26个了
} // 因为26不是8的倍数 ,所以凑到32字节
第12题 p++就是从起始地址开始偏移1个short单位,也就是2个字节 ,3000+2就是3002了
第9题 int s[2]={1}; 意思就是int s[2]={1,0}; s[1]就是0,*10还是0
更多追问追答
追问
第九题s【0】=k;这个条件放这是干嘛的呢
追答
就是糊弄人的,包括 int k=3; 都是没用的条件
匿名用户
2019-06-28
展开全部
计算结构体类型空间大小的原则:结构体的有效对其值
1) 数据对齐原则---内存按结构体成员的先后顺序排列,当排到该成员时,其前面已开辟的空间字节数必须是该成员类型所占字节数的整数倍,如果不够则补齐,依次向后类推。
2) 整体空间是占用空间最大的成员类型所占字节数的整数倍。
char[10]位十个字节,double是八个字节,10不是8的倍数,不满足第一项,向上补齐为16字节,所以结构体大小位16+8 = 24,结构体成员占用空间最大是double类型,24是8的倍数满足第二项,所以结果为24.

指针偏移偏移的是指针所指类型的字节个数:short类型指针偏移一位相当于地址移动sizeof(short)字节。
数组初始化时,下标代表数组内元素个数,int s[2] = {1};表示数组s内有两个元素,第一个元素位1,即s[0] = 1,所以数组的第二个元素没有初始化,默认为0,即s[1] = 0;所以计算结果为0。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式