1. 程式人生 > >C語言中值的交換

C語言中值的交換

    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存放的地址是隨機的
     應該修改為:      
void  swap(int *a ,int *b)
{
    int x;
    int *temp=&x;
    *temp=*a;
    *a=*b;
    *b=*temp;
}
    2、 錯誤寫法二:     
#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;
}