理解嵌入式 C 语言变量声明

问题描述 投票:0回答:1

我试图理解一些声明变量的嵌入式 C 代码。

uint8_t *p=(uint8_t *)&NOCAN_REGS;

NOCAN_REGS 是在不同文件中定义的结构(见下面的链接)

我的理解是变量“p”是一个指向无符号 8 位整数的指针,但是等号之后的类型转换对我来说是个谜。

我会很感激一步一步的解释,或者一个可以帮助我掌握这种语法的学习资源的链接。

c variables embedded declaration
1个回答
1
投票

好的,这是

=
标志后的所有内容:

(uint8_t *)&NOCAN_REGS;

从右到左(因为这样更容易解释):

NOCAN_REGS;

...正如您提到的,这是全局结构对象的名称。

&

&
符号表示你想要一个指向它之后的任何东西的指针,所以

&NOCAN_REGS

... 表示“指向 NOCAN_REGS 结构的指针”。

(uint8_t *)

剧组来强行把表情类型从

nocan_registers_t *
改成
uint8_t *
。也就是说,您是在告诉编译器您希望表达式的类型是指向无符号字节的指针,而不是指向 a-
nocan_registers_t
.

的指针

通常,当程序员想将结构的内存视为原始字节缓冲区时,他会像这样进行强制转换。这是一件棘手的事情,因为当您像这样丢弃类型信息时,编译器通常会为您处理的问题(例如成员变量的字节序、它们与适当边界的对齐、填充字节等) 现在成为程序员必须考虑的事情......但它在你想要的情况下很有用,例如将原始内存转储到磁盘或类似的地方。

© www.soinside.com 2019 - 2024. All rights reserved.