指向该指针的指针和地址会导致相同的事情
pointer and address to that pointer lead to the same thing
当我看到这些行时:
BYTE MessageToProcess[MAX_MESSAGE_LENGTH];
TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)&MessageToProcess;
我对自己说,第二行一定是这样的:
TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)MessageToProcess;
但是当我在调试模式下检查时,"pHdr"在两个示例中都指向与"MessageToProcess"相同的内容,而在第一个代码中,在MessageToProcess之前有一个"&",因此通常pHdr应该包含MessageToProcess的地址,而不是它指向的字节的地址,例如,messageToProcess中的第一个元素。
所以问题是发生了什么?我们正在处理指向字节的指针而不是函数,所以添加和必须改变等式。
在代码的后面,我们将像这样使用 pHdr:
pHdr->size+2
但最初,在第一个代码中,它确实包含将地址保存到数组第一个字节的指针的地址。
变量MessageToProcess
是一个数组。它被放置在内存中的某个地方。通过使用&MessageToProcess
我们获得了内存中存储数组的位置的地址。&MessageToProcess
的类型是 BYTE (*)[MAX_MESSAGE_LENGTH]
.
当您使用不带 address-of 运算符的MessageToProcess
时,它会衰减到指向第一个元素的指针,即 &MessageToProcess[0]
.其类型是 BYTE *
.
对于问题中显示的简单示例,这两个地址是相同的。当您尝试使用这些指针做更多事情时,差异就来了。例如,如果您(&MessageToProcess)[1]
,您将不会得到与执行MessageToProcess[1]
时相同的东西。
为了稍微可视化它,假设我们有以下定义:
int a[4] = { 0, 1, 2, 3 };
然后是这样的:
&a &a+1| |五 五+---+---+---+---+|0 |1 |2 |3 |+---+---+---+---+^ ^| |A A+1
MessageToProcess
是一个数组。
对于数组,数组的基址可以通过以下方式替代:
&MessageToProcess
或MessageToProcess
或&MessageToProcess[0]
.
- CUDA:统一内存和指针地址的更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 向指针地址添加 20 个字节偏移量
- 如何理解智能指针的底层指针地址?
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 返回数组中值的指针地址
- C++向指针地址添加 4 个字节
- 指针地址的内存偶尔更改了函数前和后返回
- 如何根据指针地址获取指针内容
- C++ 将指针地址传递给函数
- 直接从指针/地址访问数组的元素
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如何保存指针地址,以便另一个指针可以继续处理它
- 间接寻址运算符如何返回带有运算符重载的指针地址
- 使用已删除的指针地址.据我所知,
- 如何保护类外用户可以修改的指针地址?C++
- 多个调用构造函数将更改C 中的成员指针地址
- 类对象指针的向量:如何在指针地址获得价值?C 和SDL_RECT
- Visual Studio C 2K15-在指针地址上获取错误
- 指针地址和参考混乱