目录
一、结构体
1.定义:
struct student
{
int score;
char name[20];
int age;
}; //告诉编译器 ,我定义了一个 新的数据类型 --- 代表学生数据的 -数据类型
//自定义数据类型
类型名: struct student
//等价 int ,short,float 等
有三种定义方式:
方式一:
先定义结构体类型,再定义结构体变量名
struct stu
{
....
};//先定义类型
struct stu s; //再定义变量名
方式二:
定义类型的同时定义变量名
struct stu
{
....
}s={初始化};//先定义类型
方式三:
//如果这个类型只用一次
定义类型的同时定义变量名,但是省略类型名
struct
{
....
}s={初始化};//先定义类型
2.结构体初始化:
struct stu s = {按照成员变量的的顺序,依次初始化};
//方式,按照成员变量本身方式初始化
//初始化值之间 以 逗号 分隔
可以初始化:
1.结构体变量
2.结构体数组
struct stu s[3] = {{"tom",100,18},{"tom",100,18},{"tom",100,18}};
3.结构体指针 :目的提高效率 :结构体指针->结构体成员变量名 //指针访问结构体成员的方式
struct stu s[3] ={{"tom",100,15},{"jack",90,18},{"jerry",80,20}}; printf("name = %s\n",s[2].name); printf("score = %d\n",s[2].score); printf("age = %d\n",s[2].age); printf("name = %s\n",(s+2)->name); printf("score = %d\n",(s+2)->score); printf("age = %d\n",(s+2)->age);
3.结构体变量的引用:
访问数据 不能访问整个结构体 ,必须访问到具体成员
s.
. 结构体成员运算符 //表示访问成员
结构体变量名.成员变量名 --- 访问到了具体成员
s.name
s.age
s.score
4.结构体大小
内存对齐:
1.结构体成员的对齐 要在自然边界对齐
2.整个结构体以最大的成员对齐 必须被4整除
例如:只有两个char大小就是4,一个int、一个char就是8

例如这个s1和s2的结构体大小是多少

结果是8,12
二、共用体(联合体)
多个变量共用同一块内存空间
关键字:
union //与struct使用方法类似
union demo { int a; short b; char c; }; //共用体类型 //表示 //a b c 公用了同一块内存空间这里只占了4个字节。
注意:
1.共用体的空间大小 == 等于 最大的成员的大小
2.共用体初始化 默认是给到 第一个成员的 --- 按第一个成员的方式进行初始化
3.各个成员的起始位置一样
根据各个成员的类型大小,拿到的字节数(空间大小)是不一样的
4.如果对共用体多次赋值
每个成员,只能影响到自己对应的空间
最终赋值的结果是多次赋值后的综合结果
通过union本身特点,实现大小端判断?
#include <stdio.h>
union demo
{
int a;
char b;
};
int main(void)
{
union demo d = {0x12345678};
if(d.a ==0x78)
{
printf("小端");
}else
{
printf("大端");
}
}
用途:
a.节省空间
b.协议 ---- 很多字段,都是用共用体来实现空间的公用
c.实现数据转换
定义一个老师和学生的数据类型:
struct stu
{
char name[20];
int age;
int score;
};
struct teacher
{
char name[20];
int age;
int salary;
};
struct member
{
char name[20];
int age;
union data
{
int score;
int salary;
}d;
};
struct member s;
s.name
s.age
s.data.score
struct member t;
t.name
t.age
t.data.salary
三、枚举
--- 一枚一枚的列举
枚举是一个有限集合 ,C语言中,将一组相关的值 集合在一起 形成枚举类型
语法:
enum 类型名
{
//枚举相关的值 --- 标识符 标识符与标识符之间用,(逗号) 隔开
};
例如:
enum weekday
{
MON =1,
TUES,
WED,
THURS,
FRI,
SAT,
SUN
};
注意:
1.枚举类型 --在C语言,本质上是用整型来处理的
枚举值--标识符,默认从0开始,依次往后 (每个比前一个大1)//可以赋值来改变
2.枚举类型的变量的取值范围 本质上,只要是整数,都可以接收
只是我们在使用时,一般,只是用,定义在枚举类型中的值
3.枚举类型的值,也可以指定
枚举和宏定义的区别:
枚举是编译时处理 枚举有类型 枚举把相关的值集合起来 更可读
宏定义时预处理阶段 宏定义无类型 宏定义没有这样的效果
所以枚举可以做类型检查,当类型不匹配时,报警
四、类型定义
typedef 是 C/C++ 语言中的一个关键字,它的全称是 "type definition"(类型定义)。但它实际的作用并不是定义新类型,而是为已有的类型创建别名。
typedef //type define
//给已有类型起别名
typedef int a; //此时给int起了一个别名 --别名就叫aa a;//就可以实现这样的定义了
一般是这样使用的,简化结构体声明:
typedef struct stu
{
char name[10];
int age;
}stu_t;
struct stu s;
stu_t s;
---结构体、联合体、枚举&spm=1001.2101.3001.5002&articleId=157386030&d=1&t=3&u=cea954318ebf4d2188b9ce5eeabc7b44)
381

被折叠的 条评论
为什么被折叠?



