我們首先舉例出3個函數(shù),看看這三個函數(shù)的輸出有什么不同
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設(shè)計制作、網(wǎng)站制作與策劃設(shè)計,信宜網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:信宜等地區(qū)。信宜做網(wǎng)站價格咨詢:13518219792
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
//void huhuan(int ,int);
//void huhuan_1(int ,int );
//void huhuan_2(int ,int );
void huhuan(int a,int b)
{
int t;
t=a;
a=b;
b=t;
}
void huhuan_1(int p,int q)
{
int t;
t=p;
p=q;
q=t;
}
void huhuan_2(int p,int q)
{
int t;
t=p;
p=q;
*q=t;
}
int main()
{
int a=5;
int b=2;
//huhuan(a,b);
//huhuan_1(&a,&b);
//huhuan_2(&a,&b);
printf("%d,%d\n",a,b);
system("pause");
return 0;
}
事實上,只有jiao_huan2函數(shù)才可以實現(xiàn)兩個數(shù)的交換,這是為什么呢?
【1】執(zhí)行huhuan(a,b);時,不能互換a和b的值,是因為執(zhí)行互換函數(shù)時,只是互換了形參的值,函數(shù)執(zhí)行結(jié)束時,對實參沒做任何改變。
【2】執(zhí)行huhuan_1(&a,&b);時,不能互換a和b的值,是因為對于指針變量來說,改變地址的值并不改變指針?biāo)赶虻膬?nèi)容的值。
【3】執(zhí)行huhuan_2(&a,&b);時,能互換a和b的值,是因為將a,b的地址分別傳遞給了p和q,執(zhí)行互換函數(shù)時,將a和b的原地址對應(yīng)的內(nèi)容互換了。
注意:指針就是地址;指針變量就是存放地址的變量;改變地址的值并不改變該地址對應(yīng)的內(nèi)容的值。
這里我也明白了函數(shù)需要對變量進行修改時,必須傳入指針,然后利用指針間接訪問變量,再對變量進行修改,這里也必須對函數(shù)實參和形參傳遞理解清楚。
而我們在用函數(shù)的時候,當(dāng)要修改內(nèi)存的值 需要傳內(nèi)存地址的時候,我們就需要傳入指針來達到目的。