我已经阅读了在C / C ++中可以找到的关于指针的内容,但是大多数都是介绍性的,虽然它可以帮助您了解如何使用它们,但在许多情况下,现有代码会抛出难以解释的示例。
我确实看到了一些示例,这些示例将代码行分解为真正的含义,而一些更复杂的代码最终以类似以下内容的形式出现:“指向函数的指针,该指针返回指向int指针的指针”
好的,但是您会遇到哪种情况呢?这种指针情况经常出现吗?它似乎不太可读,如果您有完整的代码,我很可能会发现错误的可能性。
我在一个我不完全理解的库中找到了一行代码,但这并不是上面列出的疯狂破译的示例:*(uint8_t *)&(SPI2-> DR)= SPI2_DATA;
SPI2_DATA已分配给SPI2的DR,但其他所有这些代码又是做什么的呢?
据我所知,代码是在指向uint8_t的指针与SPI2的DR之间进行按位“与”运算,然后取消引用整个过程来为其分配SPI2_DATA。我知道那是不对的?
您应该分解说明以完全理解会发生什么:
*(uint8_t *)&(SPI2->DR) = SPI2_DATA
&SPI->DR
获取DR
struct / class中变量的地址SPI
,该地址的类型为Something*
,其中Something
类型为DR
。
然后,将该地址强制转换为uint8_t*
,因此将其强制转换为a的指针uint8_t
,该指针的固定宽度unsigned integer
为1个字节。
最后,该地址被取消引用以分配SPI2_DATA
给它。
就像是:
Something* temp1 = &SPI2->DR;
uint8_t* temp2 = (uint8_t*)temp1;
*temp2 = SPI2_DATA;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句