2013-01-16 57 views
-6

有人可以解释为什么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; 
} 
+0

你能解释为什么你相信结果可能是25吗? –

+0

@KerrekSB我对这个网站很陌生,对不起 – Sebastian

+0

@GregHewgill,这是最后一个z值,所以为什么不是-3? – Sebastian

回答

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 
} 
0

你得到-3每次因为这是你的阵列(记住,0算作第一阵列插槽)在第3个元素。每次增加Z(Z ++)时,您都指向下一个可用插槽。 * Z = some_Number只是将该值分配给指向的数组槽。

 printf ("%d", v[3]); //should give you 25 
0

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;

等。