繁体   English   中英

指针,双指针,数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM