有人可以解释为什么 v[2] 最终的值为 -3,而不是空的,或者 25 吗?
#include <stdio.h>
int main ()
{
int v[5];
int *z = &v[0];
*z=12;
z++;
*z=16;
z++;
*z=-3;
z++;
*z=25;
printf ("%d", v[2]);
return 0;
}
#include <stdio.h>
int main ()
{
int v[5];
int *z = &v[0]; // z points to v[0]
*z=12; // v[0] = 12
z++; // z points to v[1] now
*z=16; // v[1] = 16
z++; // z points to v[2] now
*z=-3; // etc
z++; // etc
*z=25; // etc
}
每次都得到 -3,因为这是数组中的第三个元素(请记住,0 算作第一个数组槽)。每次增加 Z (Z++) 时,都会指向下一个可用插槽。*Z = some_Number 只是将该值分配给指向的数组槽。
printf ("%d", v[3]); //should give you 25
z
是一个指向整数数组的指针,这段代码:
*z=12;
等价于v[0]=12;
因为 z 被取消引用。
但是,您不是在递增*z
,这是取消引用的指针,v[0]
并且会导致v[0]
's 的值递增。
相反,您正在递增z
,这是指针自己的值 - 的地址v[0]
。
z
是一个指针,当你在这里增加它时:z++;
结果本质上是数组中的下一个元素v[0]
。
在您的代码中,生成的数组将像这样填充:
*z=12;
=v[0]=12;
z++;
*z=16;
=v[1]=16;
等等。