CH32V307 赋值运算的疑问

image.png


image.png

icon_rar.gifCH32V307VCT6.zip

虽然这样没有加强制转换的赋值是有问题的。但是编译能通过,就很好奇为什么出现这样的问题?

tim_index是指针,这只是一个简单的指针加整数的问题。


FAE您好,这里我不太明白,为什么指针加这个整数,得不到期望的值。


您好,这属于C语言指针运算问题,TIM_TypeDef *tim_index = TIM4;该句相当于声明指针类型并将TIM4地址赋值给tim_index,然后你用tim_index+某个数,相当于获取的是后面某个地址。比如你加0x32得出值为0x40001840,0x1840值为相较于0x0800,变化为0x1040,换算成十进制就是4160,0x34换算成十进制就是52,4160/52=80,由sizeof(TIM_TypeDef)可知结构体大小为80个字节,因此计算得出的是偏移之后的地址。若要得出某个值需要进行强制类型转换。网上也有很多关于指针运算的讲解,可以自己去搜索学习一下


好的,感谢您的回复。


只有登录才能回复,可以选择微信账号登录