有人可以解释为什么V [2]结束了价值-3,而不是空的,或25的事呢?有人可以解释C指针
#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;
}
有人可以解释为什么V [2]结束了价值-3,而不是空的,或25的事呢?有人可以解释C指针
#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算作第一阵列插槽)在第3个元素。每次增加Z(Z ++)时,您都指向下一个可用插槽。 * Z = some_Number只是将该值分配给指向的数组槽。
printf ("%d", v[3]); //should give you 25
z
是指向一个整数数组,这段代码:
*z=12;
因为Z被解除引用等同于v[0]=12;
。
但是,您不会递增*z
,这是取消指向v[0]
的指针,并且会导致v[0]
的值递增。
相反,您正在递增z
,这是指针自己的值 - 地址v[0]
。
z
是一个指针,当你在这里增加它时:z++;
结果本质上是数组v[0]
中的下一个元素。
在您的代码,所得到的阵列将被填充,如下所示:
*z=12;
= v[0]=12;
z++;
*z=16;
= v[1]=16;
等。
你能解释为什么你相信结果可能是25吗? –
@KerrekSB我对这个网站很陌生,对不起 – Sebastian
@GregHewgill,这是最后一个z值,所以为什么不是-3? – Sebastian