通過函數調用實作兩個數交換會 有以下幾種情況:
情況一
#include<stdio.h>
int main()
{
int a = ,b = ;
void swap(int x, int y);
swap(a,b);
printf("a=%d,b=%d\n",a,b);
return ;
}
void swap(int x, int y) //形參不能傳遞給實參,即形參對實參不構成影響
{
int tmp = x
x = y;
y = tmp;//是以當a,b傳過來的時候,形參當中x,y 進行了交換,而不能反傳給實參
//是以此程式有誤;
x = y;
y = tmp;
是以上述程式錯誤
情況二
#include<stdio.h>
int main()
{
int a = ,b = ;
void swap(int x, int y);
swap(a,b);
printf("a=%d,b=%d\n",a,b);
return ;
} ,
void swap(int *x, int *y)
{
int *tmp =* x; //實作的是兩個指針指向的交換并不影響a,b的值
*x = *y;
*y = tmp;
}
是以上述程式錯誤
情況三(正确)
#include<stdio.h>
int main()
{
int a = ,b = ;
void swap(int x, int y);
swap(&a,&b); //a,b的位址傳遞給形參
printf("a=%d,b=%d\n",a,b);
return ;
}
void swap(int *x, int *y)
{
int tmp = *x; //tmp 中存放a的位址
*x = *y; //x中存放b的位址
*y = tmp; //y中存放a的位址
}
總結:
- 形參是實參的一份臨時拷貝,形參和實參在開辟空間時,其開辟的空間是不同的
- 單項傳遞,即由實參傳遞給形參,形參無法傳遞實參
- 通過指針将形參和實參聯系起來