关于特定C变量

时间:2017-10-04 15:07:24

标签: c

这是一个简单的问题,这将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;

1 个答案:

答案 0 :(得分:1)

这会将Region设置为指向RxPacket [i] .packetdata [0]的地址SrcPkt运算符返回分组数据的(指针)地址,该数据被转换为与&相同的类型并分配给SrcPkt指针变量。

C语言中存在的

引用在C语言中不存在。在C ++中,它们通常作为指针的语法糖实现,因此您可以使用它们指向的对象而无需手动取消引用他们。在C中,您必须自己处理和取消引用指针。