關於交換函數的總結:
1、swap1沒有交換a、b的值;
2、swap2也不能,可能swap2會崩潰;
3、swap3沒有交換a、b的值;
4、swap4和swap5都可以交換a、b的值,swap4修改的是指針所指向地址中的值,swap5和swap4類似,但它是一個引用,
修改的結果直接影響實參,swap5調用的時候可以直接調用,即swap5(a,b);而不是swap5(&a,&b)。
#include <stdio.h>
#include <stdlib.h>#include <string.h>
void swap1(int p, int q)
{
int temp;
temp=p;
p=q;
q=temp;
}
void swap2(int* p, int *q)
{
int* temp;
*temp=*p;
*p=*q;
*q=*temp;
}
void swap3(int* p, int *q)
{
int* temp;
temp=p;
p=q;
q=temp;
}
void swap4(int* p, int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}
void swap5(int& p, int& q)
{
int temp;
temp=p;
p=q;
q=temp;
//printf("a=%d,b=%d\n",p,q);
}
int main(void)
{
int a=1,b=8;
int *c=&a,*d=&b;
printf("a=%d,b=%d\n",a,b);
//swap1(a,b); //值無變化
//printf("a=%d,b=%d\n",a,b);
//swap2(&a,&b); //swap2會崩潰
//printf("a=%d,b=%d\n",a,b);
//swap3(&a,&b); //值無變化
//printf("a=%d,b=%d\n",a,b);
//swap4(&a,&b);
//swap4(c,d); //swap4(&a,&b)與swap4(c,d)兩者都可以交換a和b的值
//printf("a=%d,b=%d\n",a,b);
swap5(a,b); //不可以swap5(c,d),會出錯
printf("a=%d,b=%d\n",a,b);
return 0;
}