[英]Pointers inside function in C
#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的地址时,为什么返回主函数时其值会改变? 也是为什么将其更改为在函数“ 10”之前为其分配的值“ 15”。
因为p
是fun()
,所以main()
p
。 每个函数中的p
是局部的。 因此,更改一个不会影响其他。
在C语言中, 所有函数参数均按值传递,包括指针。
*p = 15;
会将 r
设置为15,因为*p
指向main()
r
占用的内存,然后将其重新分配给&q
您的重新分配p = &q;
没有什么改变p
于呼叫点main()
为此,您需要将指针间接加倍,即将函数原型更改为void fun(int **p){
,然后使用fun(&p);
对其进行调用fun(&p);
,然后使用*p = &q;
重新分配 。
两步:
首先调用fun()
,在函数作用域内的 p
分配全局int q
[保持值10]的地址并打印。 第一个输出==> 10
;
调用从fun()
返回后,它将保留先前的地址[从main()
传递],因此将打印该地址所保留的值[在fun()
内部修改的值为15
]。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.