gpt4 book ai didi

C Pointers, Casting, Pointer to a pointer to a function, 帮助理解复杂指针

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:53 29 4
gpt4 key购买 nike

我已经阅读了我能找到的有关 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 获取struct/class SPI中变量DR的地址,该地址的类型为Something* 其中 SomethingDR 的类型。

然后这个地址被转换为uint8_t*,所以它被转换为一个指向uint8_t的指针,它是一个固定宽度的无符号整数 1 个字节。

最后,这个地址被取消引用以将 SPI2_DATA 分配给它。

类似于:

Something* temp1 = &SPI2->DR;
uint8_t* temp2 = (uint8_t*)temp1;
*temp2 = SPI2_DATA;

关于C Pointers, Casting, Pointer to a pointer to a function, 帮助理解复杂指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812449/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com