c - 初始化指向结构的指针时类型不兼容

标签 c pointers struct

我的代码中有以下内容,RDMPacket 是在包含的头文件中定义的结构。前 3 个缓冲区指针(DMX 缓冲区)工作正常,但后 3 个(RDM 缓冲区)不起作用。难道我做错了什么?我还能如何使用指针引用一组结构?

uint8_t dmxRxBufA[NumberOfChannels];
uint8_t dmxRxBufB[NumberOfChannels];
uint8_t dmxRxBufC[NumberOfChannels];

uint8_t *pDMXWriteBuf = dmxRxBufA;
uint8_t *pDMXSpareBuf = dmxRxBufB;
uint8_t *pDMXReadBuf  = dmxRxBufC;

RDMPacket rdmRxBufA;
RDMPacket rdmRxBufB;
RDMPacket rdmRxBufC;

RDMPacket *pRDMWriteBuf = rdmRxBufA;
RDMPacket *pRDMSpareBuf = rdmRxBufB;
RDMPacket *pRDMReadBuf  = rdmRxBufC;

uart.c:90:27: error: incompatible types when initializing type 'struct RDMPacket *' using type 'RDMPacket'
uart.c:91:27: error: incompatible types when initializing type 'struct RDMPacket *' using type 'RDMPacket'
uart.c:92:26: error: incompatible types when initializing type 'struct RDMPacket *' using type 'RDMPacket'

最佳答案

前三个是uint8_t的数组。这意味着 dmxRxBuf 是指向第一个元素的指针,因此,uint8_t* 其他只是 RDMPacket。如果你想传递他们的地址,你可以使用这个:

RDMPacket *pRDMWriteBuf = &rdmRxBufA;
RDMPacket *pRDMSpareBuf = &rdmRxBufB;
RDMPacket *pRDMReadBuf  = &rdmRxBufC;

或者创建 RDMPacket 的数组,就像您为 uint8_t 所做的那样

RDMPacket rdmRxBufA[];
RDMPacket rdmRxBufB[];
RDMPacket rdmRxBufC[];

关于c - 初始化指向结构的指针时类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28324225/

相关文章:

c - 从字符串中删除扩展名和目录?

c# - 什么是值继承和引用继承?

c - 为什么 fopen ("any_path_name",'r' ) 不返回 NULL?

c++ - int &a = b 在 C 4.8.1 中使 'a' 成为指向 'b' 的指针,但在 C 中却没有,为什么? (按引用调用)

objective-c - 将枚举与 NSNumber 进行比较

c - 全局访问 typedef

c++ - C++ 中的结构错误

c - 为什么下面的程序没有生成任何可见的输出?

c++ 2指向同一对象的指针

python - 如何使用 Python 'struct' 模块获取精确的结构大小