C語言中形參與實參的關系是:形參是實參的值副本,無論參數的類型是什么,傳遞到子函數的形參只是實參的值。在子函數里改變形參的值,并不會影響實參,通俗說就是形參的改變不會影響實參。
但是,如果參數是指針類型,則可以通過指針變量所指地址進行數據的改變,達到改變實參地址中的數據的目的。
在使用 swap 函數時,一定要保證上述兩點,即:參數一定要是指針類型,指向待交換的數據;swap函數里交換的一定是地址中的數據,而不是地址。
以下幾種寫法
- 正確的寫法:
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}```
2. 錯誤的寫法①,錯在交換的只是指針變量的地址,且形參的改變不能影響實參的值,并不是交換指針所指向的數據。
``` void swap(*int a,*int b)
{
int *temp;
temp = a;
a = b;
b = temp;
}```
3. 錯誤寫法②,該函數的形參并不是指針類型,行參的改變并不影響實參的值。
``` void swap(int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
}```
####重要提示,C語言中的形參是非指針類型的子函數,返回值至多一個;而形參是指正類型的子函數則可以返回多個值。