1.结构体变量的地址就是结构体的首地址
2.结构体第一个成员的地址就是结构体的首地址
要获取结构体变量的首地址,就是要获取结构体变量第一个元素的地址。
例如:
typedef struct {
uint16 Kp;
uint16 Ki;
uint16 Kd;
} spidPID; //定义一个结构体类型
spidPID VarPID={1,2,3}; //定义该类型的变量,并初始化
Uint16 Numm2=0,Numm3=0; //定义两个全局变量
Uint16 Fun(uint32 *p) //定义一个函数,用于说明结构体成员引用问题
{
return *p;
}
第一种引用方式,如下,被证明是错的,但是编译并不报警
void main(void)
{
//Numm2 = Fun( (uint32*)(&VarPID.Kp));
Numm3 = Fun( (uint32*)(&VarPID));
}
运行结果如下图,可见并没有取出第一个元素的值
第二种引用方式,如下,被证明是对的
void main(void)
{
Numm2 = Fun( (uint32*)(&VarPID.Kp));
//Numm3 = Fun( (uint32*)(&VarPID));
}
运行结果如下:
获得了第一个元素的值