[英]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.