结构体这里掌握的一直不是很好,刚把指针学会,又布置了实验课的项目,加上返乡忙碌没有敲出来任何东西,求告知思路,代ma有偿
5-1
struct test1
{
char a;
float c;
double d;
int e;
char f;
};
struct test2
{
char c;
int *p1;
int t;
double *p2;
};
struct S1
{
char c1;
int i;
};
struct S3
{
char c2;
S1 s;
char c3;
};
#include <stdio.h>
int main()
{
printf("sizeof test1:%d\n",sizeof(test1));
printf("sizeof test2:%d\n",sizeof(test2));
printf("sizeof S1:%d\n",sizeof(S1));
printf("sizeof S3:%d\n",sizeof(S3));
return 0;
}
5-2
#include <stdio.h>
typedef struct Subject
{
int mathscore;
int physicsscore;
int pregrammingscore;
} Subject;
typedef struct Student
{
char *id;
char *name;
Subject sub;
} Student;
void printMathScore(struct Student* stu,int len)
{
for (int i=0; i<len; i++)
{
for (int j=0; j<len-1-i; j++)
{
if(stu[j].sub.mathscore<stu[j+1].sub.mathscore)
{
Student p=stu[j];
stu[j]=stu[j+1];
stu[j+1]=p;
}
}
}
printf("学号\t\t姓名\t数学\t物理\t编程\n");
for (int i=0; i<len; i++)
{
printf("%s\t%s\t%d\t%d\t%d\n",stu[i].id,stu[i].name,stu[i].sub.mathscore,
stu[i].sub.physicsscore,stu[i].sub.pregrammingscore);
}
}
int main()
{
Subject sub[10]=
{
{99,100,60},{98,88,90},{87,100,100},{89,88,87},
{78,90,93},{100,100,100},{80,94,99},{100,88,78},
{78,77,76},{90,90,97}
};
Student stu[10]=
{
{"20221101","A",sub[0]},
{"20221102","B",sub[1]},
{"20221103","C",sub[2]},
{"20221104","D",sub[3]},
{"20221105","E",sub[4]},
{"20221106","F",sub[5]},
{"20221107","G",sub[6]},
{"20221108","H",sub[7]},
{"20221109","i",sub[8]},
{"20221110","J",sub[9]}
};
printMathScore(stu,10);
}
5-1
第一个test2的字节为40,因为最长的是double 八个字节,按照字节对齐就是58;
第二个text2字节16,指针和int类型都是四个,char对齐,一共44;
S1占8个,s3占16个,s在这里是两个元素所以对齐的是int类型,也是4*4;
有空写
你就把结构图想象成一组不能分开变量的整体大变量就ok了,操作上除了有个"."外和普通变量没啥区别