一、结构的基础知识
结构式一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
二、结构的声明
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 是三个全局的结构体变量
结构体变量的类型
结构的成员可以是标量、数组、指针,甚至可以是其他结构体。
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 world\n";
struct T t = {"hehe", {100, 'w', "hello world", 3.14}, arr};
printf("%s\n", t.ch);
printf("%s\n", t.s.arr);
printf("%lf\n", t.s.d);
printf("%s\n", t.pc);
return 0;
}
三、结构体变量的定义和初始化
结构式一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
ypedef struct Stu//typedef 定义struct Stu 这个结构体类型为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);
}
void Print2(Stu* ps)
{
printf("name: %s\n", ps -> name);
printf("age: %d\n", ps -> age);
printf("tele: %s\n", ps -> tele);
printf("sex: %s\n", ps -> sex);
}
int main()
{
Stu s = {"李四", 40, "1121468217", "男"};
//打印结构体数据
//Print1 和 Print2那个好
//1会直接复制结构体过去,而2只传参数,更加优越
Print1(s);
Print2(&s);
return 0;
}
(函数的栈帧的创建与销毁)
数据结构
----线性数据结构
顺序表
链表
栈:先进去后出,后进去先出。往栈里插入一个元素,叫压栈;删除一个元素叫出栈。
队列
----树形数据结构
二叉树
----图