1. 程式人生 > 其它 >c/c++的三種函式傳遞方式

c/c++的三種函式傳遞方式

技術標籤:c/c++資料結構c語言c++

@[TOC]函式的三種傳遞方式

1.值傳遞

值傳遞只是將實參的值傳遞給形參,而實參本身並不發生改變,形參x,y相當於從新申請了記憶體單元然後將實參m,n的值傳到了形參中,形參發生的改變並不影響實參。

#include <stdio.h>
#include <stdlib.h>
void add(int x, int y)
{
    x=x-1;
    y=y-1;
    printf("x的值為%d,y的值為%d\n",x,y);
}
int main()
{
    int m=5,n=4;
    add
(m,n); printf("m的值為%d,n的值為%d",m,n); return 0; }

執行結果:
在這裡插入圖片描述

2.地址傳遞

2.1指標傳遞

指標傳遞時,實參將記憶體單元的地址“分享”
給形參,從而形參和實參用同一個記憶體單元,當函式中形參發生改變時,故與形參用同一個記憶體單元的實參也發生改變。

#include <stdio.h>
#include <stdlib.h>
void add(int *x, int *y)
{
    *x=*x-1;
    *y=*y-1;
    printf("x的值為%d,y的值為%d\n"
,*x,*y); } int main() { int m=5; int n=4; add(&m,&n); printf("m的值為%d,n的值為%d",m,n); return 0; }

執行結果:
在這裡插入圖片描述

2.2引用傳遞(c++語法,c內無法用)

引用傳遞時將實參所在的記憶體單元取一個別名為形參,當形參發生改變時,所用的記憶體單元其實也是實參,所以實參也會發生改變(形參和實參公用一個記憶體單元)。
在這裡插入圖片描述

#include <stdio.h>
#include <stdlib.h>
void add(int
&x, int &y)//此時的&為引用傳遞符,不是指標傳遞的取地址符 { x=x-1; y=y-1; printf("x的值為%d,y的值為%d\n",x,y); } int main() { int m=5; int n=4; add(m,n); printf("m的值為%d,n的值為%d",m,n); return 0; }

執行結果:
在這裡插入圖片描述