【发布时间】:2022-01-07 05:24:09
【问题描述】:
我在 C 中有一个结构如下:
typedef struct ENETPACKET_S {
unsigned n_rxcmd, n_txcmd;
uint64_t n_mac; // 8 bytes unsigned or 64 bit
unsigned n_rxmiss, n_rxerr, n_rxcrc, n_txcol;
} ENETPACKET;
下面这个结构的变量定义了一个指针:
static volatile ENETPACKET *const _net1 = ((ENETPACKET *)0x00500000);
我有两个疑问:
-
我理解指向结构的指针,但在
_net1的声明中,定义了来自结构的变量/对象的指针。我不明白。 -
我对@987654325@ 指针的
((ENETPACKET *)0x00500000)初始化感到困惑,我不明白这里初始化了什么以及括号和*运算符。
【问题讨论】:
-
简单来说,可以把
(ENETPACKET *)看作ENETPACKET地址变量类型。所以总是把ENETPACKET *当作变量类型的符号。 -
我看到的是一个具有七个成员的结构类型别名,以及一个静态 volatile const 指针,指向其中一个名为
_net1的结构,它被硬初始化为似乎是特定内存地址的地址(对于像虚拟设备驱动程序这样的东西并不少见,其中真实或虚拟硬件将 IO 区域映射到特定的记录内存地址)。我不确定你在说什么 (1)。 -
电脑设备上的地址是什么?它表示一个长的二进制或十六进制数。所以将十六进制数转换为地址变量类型就是引用计算机上的地址。
-
@WhozCraig 感谢您解决这个问题!我错过了结构的 typedef 部分,因此清除了我的第 1 点。也感谢您清除我的问题的第 2 部分。这里正在初始化指针的值,我将它与正在初始化的结构内的某个变量的值混合在一起。