结构体变量
初始化
自定义初始化
struct pstu{
int id;
char name[20];
}stu[2]={1001,"mike",1002,"john"};
输入初始化
#include<stdio.h>
struct pstu{
int id;
char name[20];
}stu[10];
int main()
{
int i;
for(i=0;i<10;i++){
scanf("%d,%s",&stu[i].id,&stu[i].name);
}
指针
指针
- 结构体变量的指针就是结构体变量起始元素的地址
- 如果把一个结构体变量的起始元素的地址赋给某个指针,则这个指针指向结构体变量
- 指针变量的类型必须与结构体变量的类型相同
使用指针指向结构体变量中的元素
- 使用指针指向结构变量,一定要给结构变量命名Stu
- 在定义指针时,要用结构变量名定义
- 若为数组结构变量,则不需要取地址:p=stu
- 若不是数组结构变量,则需要取地址:p=&stu
struct Stu{
int id;
char name[40];
int score[2];
}stu[2]={1,"mike",89,96,4,"jane",98,99};
int main()
{
struct Stu *p;
p=stu;
for(;p<stu+2;p++){
printf("%d\n",p->score[1]);
}
return 0;
}
指向结构体变量的元素
用结构体变量名
struct pstu{
int id;
char name[20];
}stu[10];
struct stu[2].id;
用指针
- 两种方式:->或.
- 注意:.的优先级小于*
struct pstu{
int id;
char name[20];
}stu;
struct pstu *p;
p=&stu;
p->id;
p.name;
- 用指针遍历数组结构变量输出时,需要加括号
for(p=stu;p<stu+n;p++){
printf("%d",*(p+i));
}
结构体变量与函数
做参数
struct pstu{
int id;
char name[20];
}stu[10];
void sort(struct pstu stu[]);
- 调用函数:
sort(stu);
共用体类型
- 同一段内存单位存放不同的变量
- 后一个数据覆盖前一个数据,这几个不同类型的数据共享同一段内存结构(结构体是连续的存储
union ID{
int stuid;
int teacherid;
}peo[10];
-
应用场景:二选一的数据
-若为学生则输入学号,若为教师则输入工号 -
与结构体的比较:结构体变量所占的内存长度是各个成员所占内存之和,共用体是最长成员变量的内存占有
引用共用体变量
- 不可以用共用体变量,必须用具体成员
union ID{
int stuid;
int teacherid;
}peo[10];
printf("%d",peo[2].stuid);
枚举类型
- 变量若有范围内的具体值,则一一列举出来
enum weekday{1,2,3,4,5,6,7};
weekday=1;//只能等于范围内的内容,且必须是常量