-3
這是一個簡單的問題,這是什麼設置SrcPkt?關於一個具體的C變量
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;
順便說一句,你可以編譯所有的警告和調試信息('gcc -Wall -Wextra -g')和**使用調試器**'gdb'來一步一步地運行你的程序並查詢程序的狀態(特別值指針變量)。你會提高你的理解。儘量在紙上繪製內存圖片(箭頭指針)。 –
順便說一句,你的問題缺乏一些[MCVE](http://stackoverflow.com/help/mcve)。沒有更多的代碼(類型的定義:什麼* eactly *是'PacketStruct'等......)我們只能猜測,而不是回答。並在船上畫指針是我最好的建議。請花點時間嘗試(並在'gdb'下一步一步地運行'step') –
您有兩個數組的某種結構類型和一個指向另一個的指針,這些指針都在另一個源中定義。然後,您爲SrcPkt分配一個指針,該指針從投射RxPacket數組的第i個元素的某個成員的第一個元素的地址派生。至少我的理解。 – Gnqz