有人可以解释C指针

时间:2013-01-16 20:51:19

标签: c pointers

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

3 个答案:

答案 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;

等等。