#include<stdio.h>
int q = 10;
void fun(int *p){
*p = 15;
p = &q;
printf("%d ",*p);
}
int main(){
int r = 20;
int *p = &r;
fun(p);
printf("%d", *p);
return 0;
}
我正在玩指针。无法理解这个的输出。 输出为10 15。 一旦p指向q的地址,为什么在返回主函数时它的值会发生变化?也为什么它改变了价值&#39; 15&#39;在&#39; 10&#39;之前的功能中分配给它。
答案 0 :(得分:5)
p
fun()
p
与main()
中的p
不同。每个函数中的{{1}}都是本地的。所以改变一个不会影响其他人。
答案 1 :(得分:4)
在C中,所有函数参数都按值传递,包括指针。
*p = 15;
将r
设置为15,因为*p
指的是r
中main()
占用的内存它重新分配到&q
;
您的重新分配p = &q;
不会更改p
在呼叫者main()
中指向的内容。要做到这一点,您需要加倍间接指针,即将函数原型更改为void fun(int **p){
,使用fun(&p);
调用它,然后使用*p = &q;
重新分配。
答案 2 :(得分:1)
两个步骤:
首先致电fun()
,将全局int q
[保留值10]的地址分配到功能范围内的p
并打印。第一个输出==&gt; 10
;
一旦呼叫从fun()
返回,它将保留先前的地址[从main()
传递],因此将打印该地址所持有的值[{1 },在15
]内修改。