结构体成员变量在内存中是连续存放的吗3
发布网友
发布时间:2023-09-20 23:45
我来回答
共5个回答
热心网友
时间:2024-06-09 11:04
像这么加不对哦,每次进入循环,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;
}
热心网友
时间:2024-06-09 11:04
根据对齐方式,为1时连续,为2时,如果成员都大于等于2,就能连续小于2,就不连续
热心网友
时间:2024-06-09 11:05
默认是32位对齐的,就是不管你是一个字节变量还是2个字节变量都占4字节。想要连续要用单字节对齐伪指令
热心网友
时间:2024-06-09 11:05
不一定。
定义结构体数组:
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]; //结构类的数组定义。
热心网友
时间:2024-06-09 11:06
一个结构体中各个成员是连续的,一个结构体和另一个结构体又是想连续的