结构体变量的首地址获取注意事项

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

}

 

运行结果如下:

获得了第一个元素的值 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子力学和生命科学

写作提升自己,打赏更能鼓励我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值