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)); 

}

 

运行结果如下:

结构体变量的首地址获取注意事项_初始化_02

获得了第一个元素的值