gpt4 book ai didi

c++ - 指针和指向该指针的地址会导致相同的结果

转载 作者:行者123 更新时间:2023-11-30 18:17:05 25 4
gpt4 key购买 nike

当我看到这些行时:

BYTE MessageToProcess[MAX_MESSAGE_LENGTH];
TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)&MessageToProcess;

我对自己说第二行必须是这样的:

TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)MessageToProcess;

但是当我在 Debug模式下检查时,“pHdr”在两个示例中都指向与“MessageToProcess”相同的东西,而第一个代码中的 MessageToProcess 之前有一个“&”,因此通常 pHdr 应包含MessageToProcess 而不是它所指向的字节的地址,例如 messageToProcess 中的第一个元素。

所以问题是发生了什么?我们正在处理指向字节的指针而不是函数,因此添加 & 必须改变等式。

稍后在代码中我们将像这样使用 pHdr :

pHdr->size+2

但最初,在第一个代码中,它确实包含保存数组第一个字节地址的指针的地址。

最佳答案

变量MessageToProcess是一个数组。它被放置在内存中的某个地方。通过使用&MessageToProcess,我们获得了内存中存储数组的位置的地址。 &MessageToProcess 的类型为 BYTE (*)[MAX_MESSAGE_LENGTH]

当您使用不带地址运算符的 MessageToProcess 时,它会衰减为指向第一个元素的指针,即 &MessageToProcess[0]。其类型为BYTE *

对于问题中所示的简单问题,这两个地址是相同的。当您尝试使用这些指针做更多事情时,就会出现差异。例如,如果您执行 (&MessageToProcess)[1],您将不会得到与执行 MessageToProcess[1] 时相同的结果。

<小时/>

为了将其形象化,假设我们有以下定义:

int a[4] = { 0, 1, 2, 3 };

然后就是这样的:

&a              &a+1|               |v               v+---+---+---+---+| 0 | 1 | 2 | 3 |+---+---+---+---+^   ^|   |a   a+1

关于c++ - 指针和指向该指针的地址会导致相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35771298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com