C指针,转换,指向函数的指针,有助于理解复杂的指针

达伦

我已经阅读了在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获取DRstruct / 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

星型算法因指向父代的指针而无法正常工作,有助于修复它

来自分类Dev

指向函数转换的指针

来自分类Dev

指向指针的c ++指针和接收指向指针的调用函数

来自分类Dev

理解c函数指针

来自分类Dev

指向C ++中的函数指针的指针

来自分类Dev

AsyncController方法声明,有助于理解语法

来自分类Dev

指向C ++中函数的指针

来自分类Dev

指向函数指针数组的指针

来自分类Dev

指向成员函数的C ++指针出错:不是函数或函数指针

来自分类Dev

指向C ++中的指针的指针

来自分类Dev

指向int的指针的c ++指针

来自分类Dev

C - 指向指针数组的指针

来自分类Dev

C 指向指针警告的指针

来自分类Dev

C,指向函数强制转换的指针,代码不清楚

来自分类Dev

具有转换功能的lambda指向具有c ++链接的函数的指针

来自分类Dev

指向成员函数的C ++指针而不是函数指针

来自分类Dev

指向成员函数的指针

来自分类Dev

指向空函数的指针

来自分类Dev

指向void函数的指针

来自分类Dev

发送指向函数的指针

来自分类Dev

指向成员函数的指针

来自分类Dev

PInvoke函数,带有指向指针参数的指针

来自分类Dev

C-将指针转换为指向void的指针

来自分类Dev

指向C中内置函数的函数指针

来自分类Dev

C:指向返回枚举的函数的函数指针

来自分类Dev

指向具有多个对象的成员函数的指针的向量C ++

来自分类Dev

C - 使用指向函数的指针没有结果

来自分类Dev

指向自己的指针而没有类型转换?

来自分类Dev

指向函数的指针,返回函数指针