c/c++的三種函式傳遞方式
阿新 • • 發佈:2021-01-10
@[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;
}
執行結果: