cor*_*iKa 71
这个想法是你指向内存块
+----+----+----+----+----+----+
| 06 | 07 | 08 | 09 | 10 | 11 | mem
+----+----+----+----+----+----+
| 18 | 24 | 17 | 53 | -7 | 14 | data
+----+----+----+----+----+----+
Run Code Online (Sandbox Code Playgroud)
如果你有,int* p = &(array[5])那么*p将是14.去p=p-3将*p是17.
所以,如果你有int* p = &(array[5])和int *q = &(array[3]),然后p-q应该是2,因为指针指向的内存是2个街区之遥.
处理原始内存(数组,列表,地图等)时会抽出很多方块!真的很有帮助!
eru*_*orm 35
因为指针 - 土地上的所有东西都是抵消的.当你说:
int array[10];
array[7] = 42;
Run Code Online (Sandbox Code Playgroud)
你在第二行中实际说的是:
*( &array[0] + 7 ) = 42;
Run Code Online (Sandbox Code Playgroud)
字面翻译为:
* = "what's at"
(
& = "the address of"
array[0] = "the first slot in array"
plus 7
)
set that thing to 42
Run Code Online (Sandbox Code Playgroud)
如果我们可以添加7来使偏移点到正确的位置,我们需要能够有相反的位置,否则我们的数学中没有对称性.如果:
&array[0] + 7 == &array[7]
Run Code Online (Sandbox Code Playgroud)
然后,为了理智和对称:
&array[7] - &array[0] == 7
Run Code Online (Sandbox Code Playgroud)
pto*_*ato 10
因此即使在整数长度不同的平台上,答案也是一样的.
假设你有一个10个整数的数组:
int intArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Run Code Online (Sandbox Code Playgroud)
然后你拿一个指向intArray的指针:
int *p = intArray;
Run Code Online (Sandbox Code Playgroud)
然后你增加p:
p++;
Run Code Online (Sandbox Code Playgroud)
你所期望的,因为p在开始intArray[0],是的增加值p是intArray[1].这就是指针算术就是这样的原因.请参阅此处的代码.