【问题标题】:Pointers and double pointers exercise指针和双指针练习
【发布时间】:2024-01-10 20:19:01
【问题描述】:
#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=&amp;b表示指针指向b的地址,然后在a=32+8之后 p=&amp;a 和双指针 *p= 32-b 所以 *p=2424 是存储指针p 的地址吗?因为现在a的值根据练习应该是24,我不明白为什么。

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

【问题讨论】:

    标签: c pointers double-pointer


    【解决方案1】:

    func被调用时,a=24,而p就是a的地址。

    function 内部,但是a 指的是全局 a,而不是main 中声明的那个。 func 首先将 that a 指定为 15。然后:

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

    【讨论】:

    • 感谢您的回答,但我不明白为什么 *p=32-8 意味着 a=24。我的意思是 *p=24 是什么意思? 24 是地址吗?
    • p 是指向main (p = &amp;a) 中的a 的指针; *p = 24 表示assign 24 to the variable pointed to by p
    • @Giorgio:如果p == &amp;a,那么*p == a,所以*p = 24和写a = 24是一样的。
    【解决方案2】:

    这次通话之前

    funct (a, &p);
    

    由于这条语句,变量a等于24

    *p = 32 - b;
    

    其中b 等于 8。

    在这个语句中的函数内部

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

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

    【讨论】:

    • a 怎么可能同时是 24 和 15?
    • @ScottHunter 嗨,3/4 开发人员。:) 不是同时。在函数调用之前a等于24。而函数内部由于声明**y = x - a;相当于 24 - 15 a 设置为 9。
    • which a 设置为 9?
    • @ScottHunter 在函数中。