赞
踩
相关链接
整合struct的相关用法并结合智能车代码进行叙述
- /*
- 无名结构体定义时需要与
- 结构体变量/结构体数组变量/结构体指针一起定义
- 否则无法引用
- */
- struct{ //缺省结构体名
- int a;
- double b;
- *char c;
- }Nameless;
- #define N 100
- /*一般结构体定义*/
- struct student{
- char name[10];
- int age;
- boolean sex;
- }stu,stu[N],*stu;
- //或者分开定义
- struct student{
- char name[10];
- int age;
- boolean sex; //0-女,1-男
- };
- struct student stu={"wkn",18,0};
- struct student stu[N];
- struct student *stu;
- //使用指针访问结构体成员
- stu=&stu; //前者为结构体指针*stu,后者为结构体变量stu
- //或 *stu=stu;
- //简略写法:struct student *stu=&stu;
- stu->age=8;
- (*stu).age=8;
- //涉及到成员型运算符与指向型运算符
Attention:指针*stu与变量stu在使用时注意区分,一般来说C语言编译器是能够区分的
(在比较复杂的数据管理系统中出现,大概?)
- /*特殊结构体*/
- //结构体中嵌套结构体
- struct birthday{
- int year;
- int month;
- int day;
- };
- struct student{
- char name[10];
- int age;
- bool sex;
- struct birthday birth;
- };
(结构体内包含指向自己的结构体指针,常在数据结构分析的链表、二叉树中出现)
- /*特殊结构体定义*/
- struct NODE{
- int value;
- struct NODE *NextNode;
- };
使用初始化的形式进行赋值
- /*初始化*/
- struct student stu={
- stu.name[10]="wkn";
- .age=18;
- .sex=0;
- };//初始化值时,加或不加结构体变量名都是可以的
上文中已有示范
struct student stu={"wkn",18,0};
即键值对类型
- /*结构体变量*/
- stu.age=18;
- /*结构体指针*/
- (*stu).age=18;
- stu->age=18;
- struct student{
- char name[10];
- int age;
- bool sex;
- }stu,stu[N],*stu;
结构体变量,例:stu
可以理解为:我们把一个同学(变量)的信息(与此同学相关的信息)统一放在struct student中
结构体数组变量,例:stu[N]
一个班共有N位同学,那我们就把这N位同学放在stu[N]中,stu[0]的结构体就存放着第一位同学的 姓名,年龄,性别的信息,以此类推。
结构体指针,例:*stu
举例子,就像我们把N位同学的信息分别存放在一字排开的N个档案柜里,我们使用结构体指针去指向我们所需要寻找的那位同学的档案柜(地址),然后就可以使用运算符读取档案柜中的同学信息了。
假若我们按一般方法去调用结构体,过程大概如下:
- struct student{
- char name[10];
- int age;
- bool sex; //0-女,1-男
- };
- struct student stu={"wkn",18,0};
- //或者这样
- struct student{
- char name[10];
- int age;
- bool sex; //0-女,1-男
- }stu={"wkn",18,0};
在这里,结构体 struct student 为新的数据类型,在定义变量的时候均要像上面的调用方法一样有保留字 struct,而不能像 int 和 double 那样直接使用 student 来定义变量
下面使用typedef定义结构体类型:
- typedef struct student{
- char name[10];
- int age;
- bool sex; //0-女,1-男
- }Stud;
这个过程也可以被拆分成两部分:
- struct student{
- char name[10];
- int age;
- bool sex; //0-女,1-男
- };//定义结构体
- typedef struct student Stud;//更改结构体类型名称为Stud
- //如此便可以直接用 Stud 代替 struct student
- Stud stu={"wkn",18,0};
上文中同样有实例:
- /*第一种方式:使用成员型运算符*/
- stu.age=18;//这是结构体变量!!!
- (*stu).age=18;//结构体指针
- /*第二种方式:使用指向型运算符*/
- stu->age=18;//指针
看看代码中报的什么错(笑)
- // <typedef.h>
- typedef struct FlyWheel//动量轮PID参数结构体
- {
- float speedout; //速度外环输出(为角度)
- float angleout; //角度内环输出(为PWM)
- float gyro_out; //角速度环输出(为PWM)
-
- //速度环参数
- float speed_P;
- float speed_I;
- float speed_D;
-
- //角度环参数
- float angle_P;
- float angle_I;
- float angle_D;
-
- //角速度环参数
- float gyro_P;
- float gyro_I;
- float gyro_D;
-
- //平衡角
- float balance_A;
- float turn_increase;
- }PID_FlyWheel;
- // <typedef.c>
- #include "typede.h"
- struct FlyWheel PID_FlyWheel = { //飞轮结构体参数
- .speed_P = 1,
- .speed_I = 1,
- .speed_D = 0,
- .angle_P = 1,
- .angle_I = 0,
- .angle_D = 1,
- .gyro_P = 1,
- .gyro_I = 1,
- .gyro_D = 0,
- .balance_A = 1, //机械零点
- };
不行?那看看四轮代码?!
- // <init.h>
- TRACK_TYPE_INFO g_TrackType; /*赛道类型*/
- // <image.h>
- typedef struct track_type_info_
- {
- uint32 m_u32CrossTime;
- //...
- } TRACK_TYPE_INFO;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。