目录
目录
前言
使用结构体不仅使代码更简洁,也使得代码可读性更高。避免出现文件开头大量定义变量的出现,导致可读性低。在项目中应该更加要注重代码的可读性,让其他共同参与开发的人能读懂你所写的代码。
1、struct用法
实例:
在一个调节电机pid控制参数的结构体可以这么定义:
struct pid
{
float kp;
float ki;
float kd;
};
上面,pid是自己定义的结构体类型;在float kp中,float是结构体成员float kp的数据类型,kp是结构体成员float kp中成员定义的名称。如何使用上述结构体,参照下面。
struct pid motor_pid;
motor_pid.kp = 1.1;
motor_pid.ki = 1.2;
motor_pid.kd = 1.3;
上述,pid是一种先前定义好的结构体类型,motor_pid是定义pid这一种结构体类型的结构体。然后依次给结构体里面的成员赋值。如motor_pid.kp = 1.1;是给motor_pid结构体中的成员kp,赋值1.1。其他成员如此类推。
也可以像数组一样赋值,如下:
struct pid motor_pid = {1.1,1.2,1.3};
如果打算一个结构体只用一次,并起一个名字,也可以这样用,如下面所述。
struct pid
{
float kp;
float ki;
float kd;
}motor_pid;
上述表示定义完一个结构体,其类型为pid,其名称为motor_pid。然后字节对其成员赋值即可,无需再次另外定义,即如下。
motor_pid.kp = 1.1;
motor_pid.ki = 1.2;
motor_pid.kd = 1.3;
2、typedef用法
用上面的例子,在struct pid前面加上typedef:
typedef struct pid
{
float kp;
float ki;
float kd;
}motor_pid;
那么,motor_pid就变成了一个类型名称,用于替代先前的struct pid。所以使用typedef struct pid之后,需要重新定义一下。
motor_pid motor1_pid;
才可以对其内容进行赋值。
motor1_pid.kp = 1.1;
motor1_pid.ki = 1.2;
motor1_pid.kd = 1.3;
又或者这样赋值。
motor_pid motor1_pid = {1.1,1.2,1.3};
3、结构体指针的使用
对于前面的:
typedef struct pid
{
float kp;
float ki;
float kd;
}motor_pid;
要使用这么一个结构体,就需要先定义一下,这里定义为motor2_pid。
motor_pid motor2_pid;
然后,对结构体motor2_pid的成员进行赋值,可以这样操作Pmotor2;。
motor_pid* Pmotor2 = &motor2_pid;
上述是指,取motor_pid类型的结构体motor2_pid的指针,名且命名为Pmotor2。然后就可以利用指针对其成员进行赋值。
Pmotor2 -> kp = 1.1;
Pmotor2 -> ki = 1.2;
Pmotor2 -> kd = 1.3;
4、结构体数组
将上述的结构体放到数组里面,就成为了结构体数组。例子如下,取先前讲到的结构体并且做了一些修改。
struct pid
{
float kp;
float ki;
float kd;
}motor_pid[10];
在结构体的motor_pid后面添加了[10],表示有一个结构体数组motor_pid[10]里面有10个元素。并且,motor_pid[10]里面的元素均是结构体,他们分别为:motor_pid[0]、motor_pid[1]、motor_pid[2]、motor_pid[3]、motor_pid[4]、motor_pid[5]、motor_pid[6]、motor_pid[7]、motor_pid[8]、motor_pid[9]一共10个元素。
同样的,使用这个结构体数组不需要再重新定义,直接使用即可。例如对motor_pid[0]里面的成员进行赋值。
motor_pid[0].kp = 1.1;
motor_pid[0].ki = 1.2;
motor_pid[0].kd = 1.3;