这是一个简单的问题,这将SrcPkt设定为什么?
extern PacketStruct RxPacket[NUM_PACKETS], TxPacket[NUM_PACKETS];
extern IPMBPacketRequestStruc *SrcPkt;
SrcPkt = (IPMBPacketRequestStruc *)&(RxPacket[i].packetdata[0]);
我对C和C ++有深刻的理解,但指针一直是我的弱点。 这行代码似乎将指针SrcPkt设置为指向RxPacket [i] .packetdata [0]
的引用我对我认为正确的答案只有部分信心,我只是想要一些验证。 编辑:
typedef struct
{
unsigned char status; // Buffer status
unsigned char stat2; // re-send status
unsigned char channel; // Channel source/destination
unsigned char length; // Total # of bytes in packetdata
unsigned char index; // Current byte being processed in packetdata
unsigned char packetdata[IPMB_MAXDATALENGTH];
} PacketStruct;
typedef struct
{
unsigned char rsSA;
unsigned char netFNrsLUN;
unsigned char cksm1;
unsigned char rqSA;
unsigned char rqSEQrqLUN;
unsigned char cmd;
unsigned char pktdta[37]; // rest of packet data
} IPMBPacketRequestStruc;
答案 0 :(得分:1)
这会将Region
设置为指向RxPacket [i] .packetdata [0]的地址。 SrcPkt
运算符返回分组数据的(指针)地址,该数据被转换为与&
相同的类型并分配给SrcPkt
指针变量。
引用在C语言中不存在。在C ++中,它们通常作为指针的语法糖实现,因此您可以使用它们指向的对象而无需手动取消引用他们。在C中,您必须自己处理和取消引用指针。