================================================
——复杂数据类型
结构体
联合体
枚举类型
1、结构体
基本定义:
struct 结构名
{
//成员列表
};
成员列表:
由基本数据类型定义的变量或者构造类型的变量
example:
struct student
{
int grade;
int age;
char name[32]
};
student:结构体名称
struct student:结构数据类型,相当于int,double,等基本数据类型
struct student stu;
stu:机构体变量
访问成员:"."
访问结构体成员:
stu.name;
stu.grade;
stu.age;
2、结构体变量的初始化
struct student
{
char name[32];
char sex;
int age;
};
(1)初始化1
struct student stu;
strcpy(stu.name,"jeck");
stu.age=24;
stu.sex='m';
(2)初始化2
struct student stu1={"lily",'f',20};
(3)初始化3:声明结构体的同时,定义结构体变量
一、 定义结构体同时,定义变量
struct student
{
char name[32];//姓名
char sex; //性别
int age; //年龄
};stu,stu1;
二、 定义结构体,同时初始化
struct student
{
char name[32];//姓名
char sex; //性别
int age; //年龄
};stu={"xiaoming",'m',23};
3.无名结构体
struct
{
int age;
char name;
}stu;
无名结构体一般不使用
4.宏定义结构体
宏是原地替换
struct student
{
char name[32];//姓名
char sex; //性别
int age; //年龄
};
#define STU struct student
STU stu,stu1;<-------> struct student stu,stu1;
5.结构体的嵌套
struct date
{
int year;
int month;
int day;
};
struct student
{
char name[32];
int age;
struct date birthday;
};
嵌套定义结构体:
/*//错误,无法分配内存空间,因student的大小不确定
struct student
{
int a;
int b;
struct student stu;
};
*/
//指针大小固定,可以分配空间
struct student
{
int a;
int b;
struct student *ps;
};
6.结构体数组
//结构体数组的初始化
struct student arr[3] =
{
{24,"hello"},
{20,"lily"},
{26,"jack"}
};
7.结构体大小
struct data
{
char name[32];//姓名
char sex; //性别
int age; //年龄
};
#include<stdlib.h>
malloc();//申请堆空间
free();//释放空间
//申请一块堆空间,大小为:sizeof(struct student)
pa=(struct date *)malloc(sizeof (struct date));
free(pa);//释放申请的堆空间
8.typedef
重新取名
typedef int I;
即给int 取别名为I;
结构体
typedef struct student
{
}STU;
STU stu;------>struct student stu;
宏定义和typedef的区别:使用指针的情况下,会有不同
9.结构体大小
内存对齐:
Linux 4字节;
Windows 8字节;
默认从偏移量为0的位置开始存储
所占字节数,是其自身大小的整数倍
10.联合体
union untype
{
int a;
long b;
};
特点:每次只能操作一个成员变量,
分配空间,按最大数据类型空间分配
11.枚举类型
enum entype
{
A,
B,
C
};
12.链表
链式存储结构,线性 存储结构
其大小可动态改变,链表是由一个个节点串起来的数据链
节点:
由数据域和指针域组成,
数据域:用来存放数据
指针域:存放下一个节点的地址
(1)创建链表
struct student
{
int id;
struct student *next;
} ;
struct student *head;
malloc()
free()
创建一个头节点:
struct student *head;
head=(struct student*)malloc(sizeof(struct student));
头节点标识一个链表,即链表名
头结点的数据域不存放数据,指针域存放第一个节点的地址,头结点只是为了标识这个链表
typedef struct student
{
int ID;
char name[32];
struct student *next;
}STU,*pSTU;
数据类型 别名
struct student * <=====> pSTU(指针类型)
struct student <=====> STU
===================================
网友评论