[英]Pointers, Double Pointers, Arrays
在下面的代码中,我们被要求确定代码的输出是什么。
#include <stdio.h>
int main (void)
{
int x = -1;
int y = -1;
int **pp;
int *pi[2];
pi[0] = &x;
pi[1] = &y;
*pi[0] = 4;
*pi[1] = 5;
printf ("A: %d %d\n", x, y);
pp = pi; // HINT: same as pp=&pi[0];
**pp++ = 90;
**pp = 75;
pi[0] = &y;
**--pp = 35;
printf ("B: %d %d\n", x, y);
return 0;
}
应该是:
答:4 5
B:90 35
我确实了解4 5,但不了解B。非常感谢您的帮助!
这个问题的关键是何时增加和减少。 因为这是行后的增量,所以:
**pp++ = 90;
原始指针的内容被修改(&x),然后pp指向pi [1]。 然后将pi [0]设置为y的地址:
pi[0] = &y;
最终,pp被预先描述并指向pi [0],它指向y,然后被更新。
**--pp = 35;
编辑:修改为说“原始指针的内容”
在此表达式中,您将pp指向pi指针数组。
pp = pi;
在这里,您取消引用pp(** pp指向pi [0],其中x指向x的指针),然后您就开始设置90。因此,您在x中获得了值90。 然后在处增加指针pp,现在它指向pi [1]。
**pp++ = 90;
与先前的步骤相同,但此刻您的pp指向pi [1],而y则指向y。 所以现在y是75。但是这次您不增加指针,因此pp仍指向pi [1],而y是y。
**pp = 75;
在此步骤中,将35赋给y,然后递减pi [0]的指针。 因此,现在您在y中的值为35。
**--pp = 35;
最后,您有x == 90和y == 35。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.