-6

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

3 回答 3

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
}
于 2013-01-16T20:56:03.480 回答
0

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

        printf ("%d", v[3]); //should give you 25
于 2013-01-16T20:58:09.880 回答
0

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;

等等。

于 2013-01-16T21:06:04.253 回答