關於交換函數的總結

關於交換函數的總結:

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章