【发布时间】:2015-06-09 21:40:37
【问题描述】:
假设你有一个指针,由类似的东西产生
int a = 5;
int* pointer = &a;
假设你在指针上加 1,如下所示
pointer = pointer + 1;
现在假设指针的原始按位表示是
00000000 00000000 00000000 00000000
那么新的表示是00000000 00000000 00000000 00000001?还是00000000 00000000 00000001 00000000?还是两者都没有?
我很困惑,因为我觉得给一个数字加 1 应该给它的按位表示加 1。但是如果给数组的索引加 1,新地址距离旧地址 32 位。
【问题讨论】:
-
后者;它会在内存中移动 sizeof(int) 个字节
-
将
int *移动一个字节并不常用。 -
在your favorite search engine中查找“指针算法”
-
简单的答案是:它添加了等于指针数据类型大小的字节数。如果该类型是
int,则它会增加 4 或 8,具体取决于架构。 -
"我觉得给一个数字加 1 应该给它的按位表示加 1" 为什么?给一个数字加 1 应该给它的值加 1 不是更明智吗?向值的编码添加 1 几乎是您永远不想做的事情。