C語言 指針在函數傳參中的使用


int add(int a, int b)   //函數傳參的時候使用了int整型數據,本身是數值類型。實際調用該函數時,實參將自己拷貝一份,並將拷貝傳遞給形參進行運算。實參自己實際是不參與運算的。所以在該函數中,實參本身是沒有得到改變的。

int main()

{

  int x = 3, y = 5;

       swap(x, y);

  printf("x = %d ,y = %d\n",x, y);  //交換失敗

       swap_pointer(&x, &y);

  printf("x = %d ,y = %d\n",x, y);  //交換成功

}

int swap(int a, int b)     //C語言中,函數調用時,實參傳遞給形參實際是傳值調用。也就是說,實參x和y將自己的值拷貝一份傳給形參 a 和 b;因此在函數swap中實際得到交換的是 a 和 b,而不是實參 x 和 y,因此函數執行完后,x和y的值依然沒有改變。

{

  int temp;

  temp = a;     //a是swap里邊的形參,實際調用時得到的是實參x的一份拷貝,只是和x的值相等而已,其他並無任何關聯,因此在這里不能訪問到實參x

       a = b;

  b = temp;

  return 0;

}

int swap_pointer(int *p1, int *p2)   //C語言函數調用時,一直都是傳值調用。也就是說實際傳遞的一直都是實參的拷貝,但是在本函數中的形參和實參都不是x和y,而是x和y的地址值。這樣的話,就讓我們在調用函數里通過間接訪問*p的方式,訪問到了函數外部的實參。                                                      //(如果不使用指針,再調用函數內部只能訪問到形參,無法訪問到函數外部的實參)

{

  int temp;

  temp = *p1;     //實際調用時,p1得到的實參是x的地址&x,所以*p1代表的就是x

       *p2 = *p1;

       *p1 = temp;

       return 0;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM