#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
在
`*p=32-b`
此外,p=&b
表示指针指向b的地址,然后指向a=32+8
p=&a
和双指针*p= 32-b
所以*p=24
。 24
是否存储指针p
的地址?因为根据练习,现在a
的值应该是24,我不明白为什么。
有人可以一步一步告诉我如何处理这类运动?
答案 0 :(得分:5)
在调用func
时,a
= 24,而p
是a
的地址。
然而,在function
内,a
指的是全局 a
,而不是main
中声明的全局 func
。 a
首先将 **y
分配为15.然后:
a
是main
x - a
main
a
的{{1}}(24)减去全局a
(15),产生9 **y = x - a
将main
的{{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
。