结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
结构的声明
struct tag
{
member-list;
}variable-list;
//描述 一个学生-一些数据
//名字
//年龄
//电话
//性别
例如描述一个学生:
typedef struct Stu
{
char name[20];//名字
int age;//年龄
char sex;//性别
char id[20];//学号
}Stu;//分号不能丢
//描述一个学生-一些数据
//名字
//年龄
//电话
//性别
//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 s;
return 0;
}
typedef struct Stu
{
//成员变量
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;
int main()
{
Stu s1;//局部变量
struct Stu s2;
return 0;
}
结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体
结构体变量的定义和初始化
有了结构体类型,那如何定义变量,其实很简单。
struct Point
{
int x;
int y;
}p1;
struct Point p2;
//初始化,定义变量的同时赋初值
struct Point p2={x,y};
struct Stu //类型声明
{
}
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 word
printf("%lf\n",t.s.d);//3.14
printf("%s\n",t.pc);//hello bit
}
typedef struct Stu
{
//成员变量
char name[20];
short age;
char tele[12];
char sex[5];
}Stu;
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,"15598886688","男"};
//打印结构体数据
//Print1和Print2哪个更好?
Print1(s);
Print2(&s);
return 0;
}
上面的print1和print2函数哪个更好些?
答案是:首选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);
printf("%d\n",ret);
return 0;
}
数据结构:
-----线性数据结构
顺序表
链表
栈 栈:先进后出,后进先出
插入一个元素叫压栈,删除一个元素 叫出栈
队列
-------树形数据结构
二叉树
-----图
大家注意搜索函数栈帧的创建和销毁
课下了解了解