目录
一、结构体的引入
现实生活中有很多变量需要描述,例如一个人的信息
姓名:char name[20];
性别:char sex;
年龄:int age;
当需要描述很多人的信息的时候,就显得非常麻烦。这样c语言就引入了结构体的概念。
结构体是不同数据类型变量的集合。
二、结构体的定义以及初始化
1、结构体的定义
三种方法:
1)
struct tag
{
char name[20];
char sex;
int age;
}; //定义结构体类型
struct tag people; //定义结构体变量
先定义结构体类型,再用类型定义变量。最常用的方法。
2)
struct tag
{
char name[20];
char sex;
int age;
}people;
struct tag people2;
//定义类型的同时定义一个变量,还可以用来定义其他变量。
3)
struct
{
char name[20];
char sex;
int age;
}people;
这种方法只能在定义类型的时候定义变量。
2、结构体变量的初始化。
用大括号,给对应的元素赋值。
struct tag
{
char name[20];
char sex;
int age;
}people = {“zhangsan”,’b’,20};
struct tag people2 = {“lisi”,’b’,22};
三、结构体内元素的访问
1、用结构体变量名
结构体变量名.元素
2、用结构体指针
指针变量名->元素
两种方法访问到的结果是一样的。
#include <stdio.h>
struct tag
{
char name[20];
char sex;
int age;
}people = {"zhangsan",'b',20};
struct tag people2 = {"lisi",'b',22};
int main()
{
struct tag *p;
struct tag student[3]= {{"老大",'b',30},{"老二",'b',25},{"老三",'g',18}};
int i;
p = &people2;
printf("姓名:%-10s性别:%-5c年龄:%-5d\n",people.name,people.sex,people.age);
printf("姓名:%-10s性别:%-5c年龄:%-5d\n",p->name,p->sex,p->age);
for(i=0;i<3;i++)
printf("姓名:%-10s性别:%-5c年龄:%-5d\n",student[i].name,student[i].sex,student[i].age);
return 0;
}
四、结构体类型的大小
1、每次开辟内存的大小都为最大的数据类型大小。
2、从上往下存储。
struct tag
{
char a;//1
int b; //2
char str[5];//3
};
拥有1、2时大小为 8
拥有 2、3时大小为 12
拥有1 、2 、3时大小为 16
五、共用体
1、共用体的定义
可以理解为一种特殊的结构体,里面同样可以存储不同的数据类型,但是不同的数据类型占用同一内存空间。
常用的定义格式:
union 共用体名
{
类型1 变量名1;
类型2 变量名2;
………
类型n 变量名n;
};
union 共用体名 共用体变量名;
2、共用体常用举例
把一个整形数据拆分为4个字符型数据。
#include <stdio.h>
union tag
{
int a;
char str[4];
};
int main()
{
union tag share;
int i;
share.a = 0x12345678;
for(i =0;i<4;i++)
printf("%x\n",share.str[i]);
return 0;
}
六、公用体的大小
1、大小为最大数据类型的整数倍。
2、能存储最大的变量。
七、枚举
把变量可能出现的值一一列举出来,相当于一个常量的集合。
格式:
enum 枚举名{枚举常量1,枚举常量2……..枚举常量n};