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吗 展开
12题a【0】的地址3000跟字节数有什么关系
9题s【1】的值为0吗 展开
2个回答
展开全部
在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
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; 都是没用的条件
--
2022-12-05 广告
2022-12-05 广告
图形化编程简单理解为用积木块形式编程,scratch和python也是其中的一种,属于入门级编程,以其简单生动的画面获得无数学生的喜爱,深圳市创客火科技有限公司是一家做教育无人机的公司,旗下有编程无人机,积木无人机及室内外编队,每款飞机含有...
点击进入详情页
本回答由--提供
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) 数据对齐原则---内存按结构体成员的先后顺序排列,当排到该成员时,其前面已开辟的空间字节数必须是该成员类型所占字节数的整数倍,如果不够则补齐,依次向后类推。
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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询