gpt4 book ai didi

c - C 中的嵌套结构说 "warning: comparison between pointer and integer"

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:36 24 4
gpt4 key购买 nike

我有一个嵌套结构定义如下:

/* Buffering incoming CAN messages */
union CANDATA // Unionize for easier cooperation amongst types
{
unsigned long long ull;
signed long long sll;
u32 ui[2];
u16 us[4];
u8 uc[8];
u8 u8[8];
s32 si[2];
s16 ss[4];
s8 sc[8];
};
struct CANRCVBUF // Combine CAN msg ID and data fields
{ // offset name: verbose desciption
u32 id; // 0x00 CAN_TIxR: mailbox receive register ID p 662
u32 dlc; // 0x04 CAN_TDTxR: time & length p 660
union CANDATA cd; // 0x08,0x0C CAN_TDLxR,CAN_TDLxR: Data payload (low, high)
};
struct CANRCVTIMBUF // CAN data plus timer ticks
{
union LL_L_S U; // Linux time, offset, in 1/64th ticks
struct CANRCVBUF R; // CAN data
};

我的变量声明如下:

static struct CANRCVTIMBUF* pfifo1; // Pointer to CAN driver buffer for incoming CAN msgs, high priority

我想我正在思考这里的指针发生了什么,但我想做的是访问 pfifo1 的 id 值:

if(&pfifo1->R.id == 0x44200000) { // Message to toggle blue led
toggle_led(15);
}

这给了我警告 warning: comparison between pointer and integer 该行。我的想法是 &pfifo1->R 会给我 CANRCVBUF 结构,我可以从中使用 . 访问 id ...不幸的是没有好像不是这样

最佳答案

&pfifo1->R.id

这导致指向 int 的指针,即它是 R.id 的地址。如果你想将 R.id0x44200000

进行比较,则不需要运算符(operator)的地址
if(pfifo1->R.id == 0x44200000)

记住; -> 取消对指针的引用,因此不需要 & (并不是说您无论如何都需要它),并且 -> 的优先级高于&

关于c - C 中的嵌套结构说 "warning: comparison between pointer and integer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21423029/

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