繁体   English   中英

指针和双指针练习

[英]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=24 24是指针p存储的地址吗? 因为现在的价值a要根据演习是24,我不明白为什么。

有人可以一步一步告诉我如何进行这种锻炼吗?

由时间func被调用时, a = 24, p是的地址a

但是,在function内部, a表示全局 a ,而不是main声明的a。 func第一赋给 a是15。然后:

  • **yamain
  • 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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