C語(yǔ)言中形參與實(shí)參的關(guān)系是:形參是實(shí)參的值副本,無(wú)論參數(shù)的類(lèi)型是什么,傳遞到子函數(shù)的形參只是實(shí)參的值。在子函數(shù)里改變形參的值,并不會(huì)影響實(shí)參,通俗說(shuō)就是形參的改變不會(huì)影響實(shí)參。
但是,如果參數(shù)是指針類(lèi)型,則可以通過(guò)指針變量所指地址進(jìn)行數(shù)據(jù)的改變,達(dá)到改變實(shí)參地址中的數(shù)據(jù)的目的。
在使用 swap 函數(shù)時(shí),一定要保證上述兩點(diǎn),即:參數(shù)一定要是指針類(lèi)型,指向待交換的數(shù)據(jù);swap函數(shù)里交換的一定是地址中的數(shù)據(jù),而不是地址。
以下幾種寫(xiě)法
- 正確的寫(xiě)法:
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}```
2. 錯(cuò)誤的寫(xiě)法①,錯(cuò)在交換的只是指針變量的地址,且形參的改變不能影響實(shí)參的值,并不是交換指針?biāo)赶虻臄?shù)據(jù)。
``` void swap(*int a,*int b)
{
int *temp;
temp = a;
a = b;
b = temp;
}```
3. 錯(cuò)誤寫(xiě)法②,該函數(shù)的形參并不是指針類(lèi)型,行參的改變并不影響實(shí)參的值。
``` void swap(int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
}```
####重要提示,C語(yǔ)言中的形參是非指針類(lèi)型的子函數(shù),返回值至多一個(gè);而形參是指正類(lèi)型的子函數(shù)則可以返回多個(gè)值。