指针和双指针练习

Pointers and double pointers exercise

#include <stdio.h>

 int a;

 int main ()
 {
     int a, b;
     int *p;
     b = 8;
     p = &b;
     a = 32 + b;
     p = &a;
     *p = 32 - b;
     funct (a, &p);
     *p = 2;
     printf ("a=%d b=%d", a, b);
 }

 funct (int x, int **y)
 {
     a = 15;
     **y = x - a;
     *y = &a;
 }

谁能告诉我为什么 a 等于 9?我试图解决它,但我不能很好地理解它

我尝试了 code::blocks 中的代码,显然 a

之后从 40 变为 24
`*p=32-b`

还有,p=&b表示指针指向b的地址,那么在a=32+8之后 p=&a 和双指针 *p= 32-b 所以 *p=2424是指针p存放的地址吗?因为现在 a 的值根据练习应该是 24 而我不明白为什么。

谁能一步步告诉我如何处理这些运动?

调用func时,a=24,pa的地址。

function中,但是,a指的是全局a,而不是main中声明的. func 首先将 that a 赋值为 15。然后:

  • **ymain
  • 中的a
  • x - amaina (24) 减去全局 a (15),得到 9
  • 所以 **y = x - amaina 设置为 9

在这次通话之前

funct (a, &p);

由于这条语句

变量a等于24
*p = 32 - b;

其中 b 等于 8。

在此语句中的函数内部

 a = 15;
 **y = x - a;

a 设置为 24 - 15 等于 8 因为取消引用的指针 *y 指向原始变量 a.