指针和双指针锻炼

时间:2017-01-25 16:17:59

标签: c pointers double-pointer

#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,我不明白为什么。

有人可以一步一步告诉我如何处理这类运动?

2 个答案:

答案 0 :(得分:5)

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

然而,在function内,a指的是全局 a,而不是main中声明的全局 funca首先将 **y分配为15.然后:

  • amain
  • 中的x - a
  • main a的{​​{1}}(24)减去全局a(15),产生9
  • 所以**y = x - amain的{​​{1}}设置为9

答案 1 :(得分:0)

在此电话会议之前

funct (a, &p);

由于此声明,变量a等于24

*p = 32 - b;

其中b等于8。

本声明中的函数内部

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

a设置为24 - 15,等于8,因为解除引用的指针*y指向原始变量a