今天學(xué)到了函數(shù),想寫一個(gè)交換兩個(gè)數(shù)字的函數(shù)。最開始寫的代碼如下:
設(shè)想在函數(shù)里用第三變量進(jìn)行交換
#define _CRT_SECURE_NO_WARNINGS 1//vs IDE scanf函數(shù)報(bào)錯(cuò)問題解決方案
#includevoid swap(int x, int y)
{int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
int main()
{int a = 10;
int b = 20;
printf("交換前a=%d,b=%d\n", a, b);
swap(a, b);
printf("交換后a=%d,b=%d\n", a, b);
return 0;
}
結(jié)果發(fā)現(xiàn)輸出之后并沒有發(fā)生交換
經(jīng)教程才知道,參數(shù)傳入函數(shù)的只是數(shù)值,數(shù)值在函數(shù)里交換,并沒有引起實(shí)參a,b的交換。
所以這里需要用到指針變量,用指針指向變量的地址,進(jìn)行交換,才能完成想要的功能。
ps:個(gè)人理解,形參改變不能改變實(shí)參,只能用形參指針變量指向?qū)崊⒌刂?,去改變指向?nèi)容,從而間接改變實(shí)參變量。(不知道個(gè)人理解對(duì)不對(duì),望大佬指正)
代碼如下:
#define _CRT_SECURE_NO_WARNINGS 1
#includevoid swap(int* pa, int* pb)
{int tmp = 0;
tmp = *pa;
*pa=*pb;
*pb = tmp;
}
int main()
{int a = 10;
int b = 20;
printf("交換前a=%d,b=%d\n", a, b);
swap(&a, &b);
printf("交換后a=%d,b=%d\n", a, b);
return 0;
}
這里運(yùn)行結(jié)果:
獲得了想要的結(jié)果。
新手一枚,碼字不易
轉(zhuǎn)載請(qǐng)點(diǎn)贊
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧