當我看到這這些行同樣的事情:指針和地址,該指針導致
BYTE MessageToProcess[MAX_MESSAGE_LENGTH];
TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)&MessageToProcess;
我對自己說,第二行必須是這樣的:
TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)MessageToProcess;
但是,當我在調試模式下檢查「pHdr」指向與兩個示例中的「MessageToProcess」相同的事物,而在第一個代碼中的MessageToProcess之前有一個「&」,所以通常pHdr應該包含MessageToProcess的地址,而不是它指向的字節,例如第一個messageToProcess中的元素。
所以這個問題發生了什麼?我們正在處理指向字節而不是函數的指針,所以添加&必須改變公式。
在我們使用PHDR這樣的代碼之後:
pHdr->size+2
但在最初,第一個代碼,它包含指針保存的地址到陣列的第一個字節的地址。
數組衰變爲指針。你會在任何書中找到關於該語言的解釋。 –
和例如char **,指針類型的指針是不同於指針類型 – Aminos
此代碼可能具有未定義的行爲,請檢查[嚴格別名規則](http://stackoverflow.com/questions/98650) /是什麼 - 是最嚴格走樣規則)。 – Lundin