当我看到这这些行同样的事情:指针和地址,该指针导致
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