C語言值傳遞,地址傳遞,引用傳遞


 

C語言參數傳遞方式:
值傳遞(swap1函數)
地址傳遞(swap2函數)
引用傳遞(swap3函數)

#include<stdio.h>
#include<windows.h>
void swap1(int,int);          //值傳遞
void swap2(int *p1,int *p2);  //地址傳遞
void swap3(int &a,int &b);    //引用傳遞
int main(void)
{
    int x=3,y=5;
    printf("main address of a = %d,b=%d\n",&x,&y);
    swap1(x,y);
    printf("the number of a=%d,b=%d\n",x,y);
    swap2(&x,&y);
    printf("the number of a=%d,b=%d\n",x,y);
    swap3(x,y);
    printf("the number of a=%d,b=%d\n",x,y);
    system("pause");
    return 0;    
} 
void swap1(int a,int b)     //不影響main函數中值的變化
{
    int temp;
    printf("swap1 address of temp = %d,a=%d,b=%d\n",&temp,&a,&b);
    temp = a;
    a = b;
    b = temp;
}
void swap2(int *p1,int *p2)   //主函數中x,y的值會變化
{
    
    int temp;
    printf("swap address of temp = %d,p1=%d,p2=%d\n",&temp,p1,p2);
    temp = *p1;
    *p1 = *p2;
    *p2 = temp; 
}
void swap3(int &a,int &b)  //主函數中x,y的值會變化
{
    int temp;
    printf("swap3 address of temp = %d,a=%d,b=%d\n",&temp,&a,&b);
    temp = a;
    a = b;
    b = temp;
}

通過運行結果我們能夠看到函數swap2和swap3所傳遞進去的地址的值和main函數中x,y地址是相同的,這也就證明了地址傳遞和引用傳遞都是直接傳遞的變量所在的地址,函數的主要的作用就是對存儲在地址中的變量進行直接的操作,所以調用過swap2和swap3后,能夠成功修改其中的值,而調用swap1函數時,程序在調用子函數時會為x y重新開辟內存,並將實參的值復制到a b中去,這也就解釋了為什么swap1中a和b的地址是和main函數和swap2函數,swap3函數不同的原因!

總結:
1.傳值調用中程序在調用子函數時會為a b重新開辟內存,並將實參的值復制到a b中去,然后在swap1函數中,a b確實發生交換了,但這跟主函數中的x y毫無關系呀,x y並未發生改變呀
2.用了引用變量后,就不再為形參開辟內存,所有操作都是直接修改實參變量。

 

參考:https://blog.csdn.net/wuzhuceji/article/details/104111160


免責聲明!

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



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