结构体的基础知识
结构是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同的变量。
结构的声明
struct Stu
{
//成员变量
char name[20];
short age;
char tele[12];
char sex[5];
}s1,s2,s3;//s1,s2,s3是三个全局的结构体变量
int main()
{
struct Stu s;//局部的结构体变量
return 0;
}
typedef struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;//类型
int main()
{
struct Stu s;//局部的结构体变量
return 0;
}
结构成员的类型
结构的成员可以是标量,数组,指针,甚至是其他结构体。
结构体变量的定义与初始化
有了结构体类型,那如何定义变量?
typedef struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;//类型
int main()
{
Stu s1 = { "张三",20,"12345678","男" };
struct Stu s2 = {"李四",30,"12345678","保密"};//局部的结构体变量
return 0;
}
结构体套娃(doge)
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\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.pc);//hello
return 0;
}
结构体成员的访问
结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的,点操作符接受两个操作数。
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);
}
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,"112245678","male"};
//打印结构体数据
//print1和print2 哪个更好?
Print1(s);
Print2(&s);
return 0;
}
这两个函数哪个更好?
answer:Print2
函数传参的时候,参数是要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。
所以:结构体传参的时候,要传结构体的地址。
补充:压栈
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 10;
int b = 20;
int ret = 0;
ret=Add(a,b)
return 0;
}
数据结构:
1.线性数据结构:
顺序表
链表
栈:先进先出,后进的后出(插入一个元素:压栈;删除一个元素:出栈)
队列
2.树形数据结构
二叉树
3.图