【发布时间】:2021-02-17 00:50:19
【问题描述】:
#include <stdio.h>
int main() {
int *numPtrA = NULL; // pointer to an integer pointer to null.. ascii value of zero
printf("%p\n", numPtrA + 2); // prints 0x8 which i expect
printf("%p\n", numPtrA + 5); // prints 0x14 and i dont know why
}
我正在尝试通过在空指针的 ASCII 码中添加一些东西来打印地址 0x14,我认为空指针是 0 地址。但是,当我将 5 添加到 NULL 时,我不明白为什么我得到 0x14 而不是 0x20。我想既然 ptrNumA 是一个指向整数的指针,它应该添加大约 5 个整数块(每个 4 个字节)并且新地址应该是 0x20
感谢您的帮助。非常感谢。
【问题讨论】:
-
十六进制的 14 是十进制的 20
-
5 * 4 = 20 = 0x14 -
除非必要,请不要发布图片
-
0x表明该值是以 16 为基数的。所以您期望的0x20是十进制的32。0x不代表“指针值”。 -
不要同时使用 C 和 C++ 标记问题,除非它们涉及两种语言之间的交互,或者有特定原因询问两种语言之间的差异。 C 和 C++ 对空指针和地址算术有不同的规范,并且同时询问两者会混淆问题。如果您想询问两种语言,可以在单独的问题中进行。
标签: c++ c pointers null-pointer