结构体
1.结构体类型的声明
2.结构体初始化
3.结构体成员访问
4.结构体传参
结构体的声明
结构体的基础知识:
结构体是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。
结构的声明
//sruct:结构体关键字 stu:结构体标签 struct stu:结构体类型;
//struct stu
//{
// //成员变量
// char name[20];
// short age;
// char tele[12];
// char sex[5]
//}s1,s2,s3;//是三个全局的结构体变量//但我们很少使用这种方法,要尽量少使用全局变量;
typedef struct stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}stu;//typedef:给类型重命名stu
int main()
{
struct stu s1;//局部变量;
stu s2;
return 0;
}
结构成员的类型
结构的成员可以是普通变量,数组,指针,甚至是其他结构体。
结构体变量的定义和初始化
结构体在创建的同时给它赋值,这就叫初始化
例如:stu s1 = {"张三", 20, "12930486648", "男"};
结构体成员的访问
typedef struct stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}stu;//typedef:给类型重命名stu
void print(stu s)
{
printf("name: %s\n", s.name);
printf("age: %d\n", s.age);
printf("tele:%s\n", s.tele);
printf("sex: %s\n", s.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()
{
//打印结构体print1好一些还是print2好一些
stu s = {"张三", 40, "19234568899", "男"};//局部变量;
print(s);
print2(&s);
return 0;
}
答案是:首选print2函数。原因是:
函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。
结论:结构体传参的时候,需要传结构体的地址。
压栈操作:
数据结构:
顺序表:如一个内存连续存放12345,
链表:如1,2,3,4,5,被分配到不同地址,但通过1能找到2,2能找到3,3能找到4,4能找到5;
栈:存放数据时,只能从栈顶往下存放,拿出来时也必须从栈顶先拿,先进后出,后进先出。插入一个元素叫:压栈;删除一个元素叫:出栈;
队列,----线性数据结构。
二叉树---树形数据结构。
-----图,等。