指针和双指针练习
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
中声明的. func
首先将 that a
赋值为 15。然后:
**y
是main
中的a
x - a
是 main
的 a
(24) 减去全局 a
(15),得到 9
- 所以
**y = x - a
将 main
的 a
设置为 9
在这次通话之前
funct (a, &p);
由于这条语句
变量a
等于24
*p = 32 - b;
其中 b
等于 8。
在此语句中的函数内部
a = 15;
**y = x - a;
a
设置为 24 - 15
等于 8
因为取消引用的指针 *y
指向原始变量 a
.
#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 而我不明白为什么。
谁能一步步告诉我如何处理这些运动?
调用func
时,a
=24,p
是a
的地址。
在function
中,但是,a
指的是全局a
,而不是main
中声明的. func
首先将 that a
赋值为 15。然后:
**y
是main
中的x - a
是main
的a
(24) 减去全局a
(15),得到 9- 所以
**y = x - a
将main
的a
设置为 9
a
在这次通话之前
funct (a, &p);
由于这条语句
变量a
等于24
*p = 32 - b;
其中 b
等于 8。
在此语句中的函数内部
a = 15;
**y = x - a;
a
设置为 24 - 15
等于 8
因为取消引用的指针 *y
指向原始变量 a
.