C語言中值的交換
阿新 • • 發佈:2019-02-15
1、錯誤寫法一
#include<stdio.h>
void swap(int *a ,int *b)
{
int *temp;
*temp=*a;
*a=*b;
*b=*temp;
}
int main()
{
int a=1,b=2;
swap(&a,&b);
printf("%d %d\n",a,b);
return 0;
}
輸出: (lldb)
錯因:temp沒有被初始化,temp存放的地址是隨機的應該修改為:
2、 錯誤寫法二:void swap(int *a ,int *b) { int x; int *temp=&x; *temp=*a; *a=*b; *b=*temp; }
#include<stdio.h>
void swap(int *a ,int *b)
{
int *temp=a;
a=b;
b=temp;
}
int main()
{
int a=1,b=2;
swap(&a,&b);
printf("%d %d\n",a,b);
return 0;
}
錯誤原因:
指標交換了地址,變數也交換了地址。
3、不用臨時變數交換兩個引數的值
方法一 #include<stdio.h> int main() { int a=1,b=2; a = a + b; b = a - b; a = a - b; printf("%d %d\n",a,b); return 0; }
方法二
#include<stdio.h>
int main()
{
int a=1,b=2;
a = a^b;
b = a^b;
a = a^b;
printf("%d %d\n",a,b);
return 0;
}
方法三(b不可以為0)
#include<stdio.h>
int main()
{
int a=1,b=2;
a = a * b;
b = a / b;
a = a / b;
printf("%d %d\n",a,b);
return 0;
}