结构体
- 结构体类型的声明
- 结构体初始化
- 结构体成员访问
- 结构体传参
现实生活中的对象大多是复杂对象,我们用简单的int,float,double是没办法描述的
结构体的声明
结构的基础支持
结构式一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量
结构的声明
语法
struct/*关键字*/ tag/*结构体标签,自定义*/{
member-list/*被称为成员变量(成员列表)*/;
}variable-list/*变量列表*/;
struct tag{
member-list;
}variable-list;
例如描述一个学生
typedef struct Stu{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}Stu;
结构体创建
/*StuOne.c -- 以学生为例的结构体*/
#include "stdio.h"
//描述一个学生
/**
* 名字
* 年龄
* 电话
* 性别
*/
/**
* struct: 结构体关键字
* Stu: 结构体标签
* struct Stu: 结构体类型
*/
struct Stu{
//成员变量
char name[60];
short age;
char tele[12];
char sex[5];
};
int main(){
return 0;
}
结构体变量创建
int main(){
struct Stu s; //局部的结构体变量
return 0;
}
类型->图纸
struct Stu{
//成员变量
char name[60];
short age;
char tele[12];
char sex[5];
}s1,s2,s3;//s1,s2,s3是三个全局结构体的变量(不建议,原因: 尽量少用使用全局变量)
typedef
typedef struct Stu{
//成员变量
char name[60];
short age;
char tele[12];
char sex[5];
}Stu;
- typedef: 把
struct
结构体类型重新起名字(这里是重起了Stu
)
int main(){
//struct Stu s; //局部的结构体变量
Stu s1; //使用了typedef可以这样写
return 0;
}
结构体的类型
结构的成员可以是标量(普通变量)、数组、指针,甚至可以是其他结构体。
数组里面放数据用大括号,结构体里面发数据也是用大括号
typedef struct Stu{
//成员变量
char name[60];
short age;
char tele[12];
char sex[5];
}Stu;
int main(){
Stu s1 = {"张三",20,"15637","男"};//局部变量
struct s2 = {"李四",20,"135728","保密"};
}
/*StuTwo.c -- 结构体成员类型*/
#include "stdio.h"
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";
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;
}
注: 俩个arr互不影响,不同范围的变量互不干扰互不影响
/*StuThree.c -- 常规写法*/
#include "stdio.h"
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 = {"李四",25,"15161314","男"};
Print1(s);
return 0;
}
/*StuThree.c -- 箭头*/
#include "stdio.h"
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);
printf("age: %d\n",ps->age);
printf("tele: %s\n",ps->tele);
printf("sex: %s\n",ps->sex);
}
int main(){
Stu s = {"李四",25,"15161314","男"};
//Print1(s); //常规写法
Print2(&s); //传入的参数是指针
return 0;
}
- 方法1(Print1(Stu tmp)): 传入实参,形参会开辟一个与实参大小相同的内存空间,浪费了资源
- 方法2(Print2(Stu* ps)): 传入的实参的内存,地址,形参只需要开辟指针变量的内存地址,指向实参的内存地址,尽而节约空间
数据结构
线性数据结构
- 顺序表
- 1,2,3,4,5,6(数组)按顺序存储
- 链表
- 1->2->3->4->5->6(1能找到2,2能找到3,…) 这就是链表
- 栈
- 放入元素叫压栈
- 取出元素叫出栈(弹栈)
- 先进后出,后进先出原则
- 队列
+
树形数据数据结构
- 二叉树
- 图
Debug和Release的介绍
- Debug通常称为调试版本,它包含调试信息,并不做任何优化。便于程序员调试程序。
- Release称为发布版本,它王五进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好的使用。