符号 -> 在一行代码中实现了什么?

What do the symbols -> achieve in a line of code?

符号 -> 出现在我试图理解的一行代码中,有人告诉我这是一个指针。

     *data = (uint8_t)base->FIFORD;

我的解释是8位整数指针基指向一个叫FIFORD的寄存器。然后将 FIFORD 中的值分配给指针数据。这是正确的吗?

奖励:如果我想将 FIFORD 的值存储在缓冲区中以进行打印,我需要做什么?

非常感谢!

在您的示例中,“base”是指向结构的指针。

有两种方法可以使用指针(基数)访问结构中的变量:

  1. (*base).FIFORD
  2. base -> FIFORD

两者做同样的事情

在这种情况下,结构中的 FIFORD 变量被提取,转换为 uint8_t 并分配给一个,希望(上下文太少说),uint8_t 指针称为数据。

  • base 是指向数据结构的指针。数据结构只是意味着它只是一组变量。它们被存储为一个组,因为它们具有很强的相关性。您代码中的其他地方 base 被创建为“X”类型的数据结构。甚至在此之前,就会有一个关于这个类型应该是什么样子的定义(至少这个定义会说 X 包含一个总是叫做 FIFORD 的变量)。
    我们知道base是一个指针,因为有箭头。如果它是数据结构本身,代码将变为 *data = (uint8_t) base.FIFORD;

  • FIFORDbase指向的数据结构中的一个变量。代码没有提到类型是什么,但我们所知道的是它可能是一个数字。

  • 我们知道它可能是一个数字,因为我们使用(uint8_t)将它的类型更改为uint8_t(通常用于保存自然数)

  • data 是指针。我们知道这一点是因为 * 符号。 *data = 表示“data 指向的内存位置应该设置为...`

所以这一行的完整含义:
不要更改 data 指向的位置,而是将该位置的值更改为保存在该位置的数据结构中的 FIFORD 变量值的 uint_8t 转换其中 base 指向。

PS:原来的FIFORD永远不变。

关于“奖金”问题,我不太理解你的问题,因为该值已经存储在内存中。 (甚至在此行之后两次)。您可以只使用 printf 函数来打印它。
printf("Current value of data: %ui\n", *data); 这样的东西应该可以解决问题。