有人可以解释为什么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;
}
答案 0 :(得分:5)
#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
}
答案 1 :(得分:0)
每次都会得到-3,因为这是数组中的第3个元素(记住,0计为第一个数组插槽)。每次增加Z(Z ++)时,都指向下一个可用的插槽。 * Z = some_Number只是将该值赋给指向的数组槽。
printf ("%d", v[3]); //should give you 25
答案 2 :(得分:0)
z
是一个指向整数数组的指针,这段代码:
*z=12;
相当于v[0]=12;
,因为z被解除引用。
但是,您没有递增*z
,这是指向v[0]
的取消引用指针,会导致v[0]
的值递增。
相反,您正在递增z
,这是指针自身的值 - v[0]
的地址。
z
是一个指针,当你在此处递增时:z++;
结果基本上是数组v[0]
中的下一个元素。
在您的代码中,生成的数组将如下填充:
*z=12;
= v[0]=12;
z++;
*z=16;
= v[1]=16;
等等。