C语言基础-结构体、共用体、枚举
一、结构体
1.是一组有序不同数据类型的数据集合(是一种构造数据类型)
2.声明结构体类型
struct 结构名
{
类型1 成员变量1;
类型2 成员变量2;
};
例:
struct student // 定义一种结构体类型
{
char name[20];
int age;
int num;
char addr[23];
} ;
3.定义结构体变量
第一种方式 struct 结构名 变量名;
例:struct student sam;//定义struct student类型变量sam
//注意struct student 结构体类型已经声明定义,才能这么使用(上面“2.声明结构体类型”定义了该结构体类型)
第二种方式
struct 结构名
{
类型1 成员变量1;
类型2 成员变量2;
}变量1,变量2;
例:
struct student // 定义一种结构体类型
{
char name[20];
int age;
int num;
char addr[23];
} sam,lucy ; // 同时定义这种结构体类型的两个变量
第三种方式
struct
{
类型1 成员变量1;
类型2 成员变量2;
}变量名;
例:
struct // 定义一种结构体类型(结构名省略)
{
char name[20];
int age;
int num;
char addr[23];
} sam,lucy ; // 同时定义这种结构体类型的两个变量
4.访问结构体成员变量
结构体变量:变量名.成员名
结构体变量指针:指针变量->成员名 或者 (*指针变量).成员名
例:
#include <stdio.h>
struct student
{
char name[20];
int age;
int num;
char addr[23];
};
int main(void)
{
struct student sam; // 定义变量
struct student *p=NULL;
p = &sam;
sam.name = “xiaoming”; // 普通结构体变量使用成员的方式
p->age = 33; // 结构体指针变量应用成员的常用使用方式
*p).num= 1; // 先通过指针取出整个结构体变量,然后再引用单个成员
}
5.结构体的大小
1)结构体变量的首地址是其最宽基本类型成员的整数倍
2)结构体每个成员相对于结构体首地址的偏移量,都是该成员大小的整数倍(对齐)
3)结构体的总大小是其最宽基本类型的整数倍(补齐)
二、共用体
1.共用体中的成员变量公共用一块内存
2.共用体声明(与结构体类似)
union 共用体名
{
类型1 成员变量1;
类型2 成员变量2;
}
3.定义结构体变量
第一种方式 union 结构名 变量名;
第二种方式
union 结构名
{
类型1 成员变量1;
类型2 成员变量2;
}变量1,变量2;
第三种方式
union
{
类型1 成员变量1;
类型2 成员变量2;
}变量名;
例:
union
{
char c;
int age;
float score;
};
2.共用体大小
(1)由最大成员变量大小决定
(2)必须是最大基本类型的整数倍
三、枚举
1.把某个变量只能取确定的几个值,这种变量就可以定义成枚举类型
枚举类型把所有可能取到的值一一列举出来 ,列举出来的值叫做枚举常量
2.枚举类型声明
enum 枚举名
{ 枚举变量1,枚举变量2,…… };
例:
enum weekday{sun,mon,tue,wen,thu,fri,sat};
int main(void)
{
enum weekday day;
day= sun;
printf("%d\n",day); //输出 0
day= wen;
printf("%d\n",day); // 输出3
return 0;
}