结构体
本章重点
-
结构体类型的声明
-
结构体初识化
-
结构体成员访问
-
结构体传参
结构体的声明
结构的基础知识
结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量
结构的声明
struct tag
{
member-list;
}variable-list;
例如描述一个学生
//描述一个学生,一些数据放在大括号里
//名字
//年龄
//电话
//性别
//struct 结构体关键字 Stu - 结构体标签 struct Stu - 结构体类型
struct Stu
{
//成员变量,图纸
char name[20];
short age;
char tele[12];
char sex[5];
}s1,s2,s3;//;不可缺少,s1,s2,s3 是三个全局的结构体变量
int main()
{
struct Stu; //创建结构体变量,房子,局部变量
return 0;
}
用typedef定义,和上面对比一下
typedef struct Stu
{
//成员变量,图纸
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;
int main()
{
//struct Stu s1; //创建结构体变量,房子,局部变量
Stu s2;
return 0;
}
结构体变量的定义和初始化
结构成员的类型
可以是标量,数组,指针,甚至是其他结构体
定义和初始化
有了结构体类型,那如何定义变量,其实很简单
struct Point
{
int x;
int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; // 定义结构体变量p2
//初始化:定义变量的同时赋初值
int main()
{
Stu s1 = { "张三",20,"110","男" };
return 0;
}
嵌套结构体初始化
struct S
{
int a;
char C;
char arr[20];
double d;
};
struct T
{
char ch[10];
struct S s;
char *pc;
};
int main()
{
char arr[] = "hello bit\n";
struct T t = {"hehe",{100,'w',"hello world",3.14},arr};
//结构体变量初始化与访问基本形式
printf("%s\n", t.ch);//hehe
printf("%s\n", t.s.arr);//hello world
printf("%lf\n", t.s.d);//3.14
printf("%s\n", t.s.pc);//hello bit
return 0;
}
结构体成员的访问
打印结构体数据,传参可以传s也可以是s地址
- 传s
typedef struct Stu
{
//成员变量
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;
void Print1(Stu tmp)
{
printf("name: %s\n",tmp.name);
printf("age: %d\n",tmp.age);
printf("tele: %s\n", tmp.tele);
printf("sex: %s\n", tmp.sex);
}
int main()
{
Stu s = { "李四",40,"110","男" };
Print1(s);
return 0;
}
-
传s地址
typedef struct Stu { //成员变量 char name[20]; short age; char tele[12]; char sex[5]; }Stu; void Print2(Stu* ps) { printf("name: %s\n", ps->name); } int main() { Stu s = { "李四",40,"110","男" }; Print2(&s); return 0; }
结论
结构体传参的时候,要传结构体的地址
栈区 | 局部变量 |
---|---|
函数的形式参数 | |
函数调用也开辟空间 | |
堆区 | 动态内存分配 |
malloc/free | |
realloc | |
ralloc | |
静态区 | 全局变量 |
静态变量 |
数据结构
——线性数据结构
- 顺序表
- 链表
- 栈
- 队列
——树形数据结构
- 二叉树
- 图