结构体成员变量在内存中是连续存放的吗

structs{intb;intx,y;char*p;inta[10];}s1={2,1,3,"abc",{9,8,7,6}};intmain(intargc,char*... struct s
{
int b;
int x,y;
char *p;
int a[10];
}s1={2,1,3,"abc",{9,8,7,6}};
int main(int argc, char *argv[])
{
printf("%p,%p,%p,%p,%p,%p,%p,%p",&s1.b,&s1.x,&s1.y,s1.p,s1.a,&s1.a[0],&s1.a[1],&s1.a[2]);
return 0;
}

我不知道我上面写的程序有没问题,我在网上看到有人说结构体成员变量在内存中是连续存放的,也有说不是的。
我上面的程序显示应该不是连续存放的,但我现在有疑问:那我如果定义结构体数组,(数组在内存中连续分配),那岂不是矛盾了
展开
 我来答
宅在家里的2362
2011-09-16 · TA获得超过1717个赞
知道小有建树答主
回答量:701
采纳率:0%
帮助的人:392万
展开全部
像这么加不对哦,每次进神逗入循环,stu[N].a就被清零一次,以前加的和都没有了。。。
for(i=0;i<N;i++)
{
stu[N].a=0;
stu[N].a+=stu[i].a;
}
像这样,在初始化的时候清零就可以了:
for(i=0,stu[N].a=0;i<N;i++)
{
stu[N].a+=stu[i].a;
}
还有这一句:
scanf("%d%s%d%d%d",&stu[i].num,&stu[i].name,&stu[i].a,&stu[i].b,&stu[i].c);
name是字符数组,name已经是数组的头地址了,就不用取地址符了。应该是这么写
scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].a,&stu[i].b,&stu[i].c);
至于楼主要的求和函数。楼主这结构体只能这么写了。。。
int Sum(int mod)
{
int sum=0;
if(mod==1)
for(i=0,stu[N].a=0;i<N;i++)
sum+=stu[i].a;
else if(mod==2)
for(i=0,stu[N].a=0;i<N;i++)
sum+=stu[i].b;
else
for(i=0,stu[N].a=0;i<N;i++)
sum+=stu[i].c;
return sum;
}
这么用
printf("a课程总平均成绩为%d分",Sum(1)/N);
printf("b课程总平均成绩为%d分",Sum(2)/N);
printf("c课游码卖程总平均成绩为%d分",Sum(3)/N);
如果楼主的结构体这么定义模虚:
struct student
{
int num;
char name[20];
int score[3];
int sum;
}stu[N+1];
就好写多了
int Sum(int mod)
{
int sum=0;
for(i=0,stu[N].a=0;i<N;i++)
sum+=stu[i].score[mod];
return sum;
}
星柠科草说2807
2014-01-24 · TA获得超过317个赞
知道小有建树答主
回答量:568
采纳率:0%
帮助的人:349万
展开全部
根据对齐方式,为1时连续,为2时,如果成员都大于等于2,就能连续小于2,就不连续
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寒江孤影侠e3
2013-01-16
知道答主
回答量:5
采纳率:0%
帮助的人:3709
展开全部
默认是32位对齐的茄物陪,就是不管你是一个字节变量还是2个字节变量都占4字节。想要连颤蠢续要用单字节对蚂握齐伪指令
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
My空心果
2011-09-15 · TA获得超过1290个赞
知道小有建树答主
回答量:753
采纳率:0%
帮助的人:622万
展开全部
不一定。
定义结构体数组:
struct s
{
int b;
int x,y;
char *p;
int a[10];
}s1[]={2,1,3,"abc",{9,8,7,6}},s2[12];
或者:
struct s s1[10]; //结猜盯凯构类则册的数组定义。穗唤
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冶炼爱
2011-09-16
知道答主
回答量:4
采纳率:0%
帮助的人:2.6万
展开全部
一个结构体中各个成员是连续的,一个结构体和另一个结构体又是想连续的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式