如何解决指针在内存中的作用域
过去几周我一直在学习 C,但我不能完全理解内存是如何管理指针的。
我的问题来自从这里获得的示例(第 17 页,共 19 页):C-Pointer-Basics
示例代码:
#include <stdio.h>
void F(int,int *);
int main()
{
int m = 3;
int n = 5;
F(m,&n);
printf("main: %d,%d\n",m,n); // print 3 7 (Where does the 7 came from?)
return 0;
}
void F(int a,int *b)
{
/*
* `a` being a local variable,gets cleaned after `F()` ends
* BUT how does `b` retain the value of `&a`?
*/
a = 7;
*b = a; // `*b = 7`
b = &a; // `b` points to `a`
*b = 4; // `a = 4` and why `*b` doesn't return 4?
printf("F: %d,a,*b); // print 4 4
}
这里的问题是:
为什么当main()
打印m
和n
的值时,它显示m = 3
和n = 7
?
我的假设:
据我所知,指针超出了声明它的函数的范围,因此在 void F(int a,int *b)
中不再需要该函数时,它会被销毁,与他的参数相同,但是 int *b
的值{1}} 是否保留在内存中(即使 int *b
不再存在)?因此,如果这是真的,我们可以从内存中“恢复”它并在 main()
中使用它。
最好,
解决方法
对于为什么 m
和 n
打印 3,7
的问题是因为第一个参数是按值传递的,因此它只会被复制,因此不会修改原始 {{1} } 正在发生,在 m
的情况下,您正在传递其地址,因此当您执行 n
时,*b=a
的值会被复制到 a
。然后当您执行 n
时,指针 b=&a
现在开始指向 b
的地址而不是 a
的地址。这就是为什么第二次执行 n
时,不是修改 *b=4
而是修改 n
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。