簡體   English   中英

C函數內部的指針

[英]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”。

因為pfun() ,所以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;重新分配

兩步:

  1. 首先調用fun() ,在函數作用域內的 p分配全局int q [保持值10]的地址並打印。 第一個輸出==> 10 ;

  2. 調用從fun()返回后,它將保留先前的地址[從main()傳遞],因此將打印該地址所保留的值[在fun()內部修改的值為15 ]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM