【发布时间】:2012-02-11 10:38:52
【问题描述】:
如果我有这样的指针:
int* ptr;
我愿意:
printf("%#x\n%#x\n%#x\n", ptr, ptr+1, ptr+2);
我得到的输出为:
some address
some address + 4bytes
some address + 8bytes
现在如果我将指针设为short int* ptr
我以与上面相同的方式打印并得到输出:
some address
some address + 2bytes
some address + 4bytes
这是为什么呢?地址不是无符号整数吗?如果是这样,那么指针指向的数据类型应该无关紧要。指针将始终存储一个无符号整数地址,因此它将占用 4 个字节。为什么短 int 指针占用 2 个字节,而 int 指针占用 4 个字节?最后,两个指针都只存储地址,不是吗?
【问题讨论】:
-
Pointer Arithmetic的可能重复
-
我知道指针算法是如何工作的。我只是不明白为什么它的工作方式。
-
这是编译器的一个特性。它在编译时计算字节数以将其添加到指针值。
-
用
"%x"打印地址是UB。要便携且符合标准,您需要"%p"并将地址转换为void*。 -
以上所有值都是无符号整数。你能在这里指出任何浮动吗?顺便说一句,您应该接受正确的答案
标签: c pointers pointer-arithmetic