标签:博客 mem 个学生 引用 指针 函数 字节 基础 等价
struct tag {
member-list
member-list
member-list
...
};
menber-list 是结构体成员,是标准的变量定义,例如 int i,float j,char str;一个结构体可以有不同类型的变量定义
它的功能是 在使用这个结构体时有
例如:
struct tag s1
struct tag s2
typedef struct {
member-list
member-list
member-list
...
}variable-list;
这里不需要标签 tag 因为如果每次都是 struct tag来定义结构体变量的话就太麻烦了 所以引入typedefvariable-list s1
variable-list s2
总结:关键字struct和它后面的结构名一起组成一个新的数据类型名
typedef struct
{
int num;//学号
char name[10];//姓名
int math, english, computer;//三门成绩
double average;//个人平均分
}STU;
我要存放十个学生的信息STU stu[10]
STU stu[10]={{1,"陈莉莉",12,90,50},{2,"郝厉害",50,65,100}}//定义同时初始化,未定义的都为0
结构体变量 | 学号 | 姓名 | 数学 | 英语 | 计算机 | 个人平均分 |
---|---|---|---|---|---|---|
stu[0] | 1 | 陈莉莉 | 12 | 90 | 50 | |
stu[1] | 2 | 郝厉害 | 50 | 65 | 100 | |
stu[2] | 0 | 0 | 0 | 0 | 0 | |
…… | 0 | 0 | 0 | 0 | 0 | |
stu[9] | 0 | 0 | 0 | 0 | 0 |
STU stu[10]={给十位同学赋值};
for i=0 to 9
stu[i].average=(stu[i].math+stu[i].english+stu[i].computer)/3
end for//计算每个人的平均分
STU *p=stu;
for i=1 to 9
for j=0 to 9-i
if( (p+j)->average < (p+j+1)->average )//降序
STU temp;//这要交换整个结构体所以temp类型是STU
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
end if
end for
end for
//按表输出
printf("学号 姓名 个人平均分\n\n");
for i=0 to 9
printf("%-4d%4s%4f",(p+i)->num,(p+i)->name,(p+i)->average);
end for
STU s1={1,"陈莉莉",12,90,50};
STU *p
p=&s1或者p=s1
(1) 用*p
访问结构成员。如:
(*p).math = 100;
等价于s1.math=100
(2) 用指向运算符->
访问指针指向的结构成员。如:
p->math = 100;//这是常用方法 也比较方便
union 共用体名
{
成员表列;
}变量表列;
union Data{
int n; // 占用 2字节
char ch; // 占用 1 字节
float x; // 占用 4 字节
} ;
这个变量类型内存占4字节
struct Data{
int n; // 占用 2字节
char ch; // 占用 1 字节
float x; // 占用 4 字节
} ;
这个结构体变量类型则占了2+1+4=7个字节的内存
FILE *FP
fp=fopen("stu.txt","r");
fscanf(fp,"%s%s%d%d%d,p->……);
fgets(str,100,fp);
fclose(fp);
标签:博客 mem 个学生 引用 指针 函数 字节 基础 等价
原文地址:https://www.cnblogs.com/lily233/p/12044142.html