c语言中数值交换用值传递和地址传递

1:值传递,并未实现真正的交换

void Swap(int a,int b)//这里a,b的地址与主函数的地址不同,仅仅是函数名相同
{
    int tmp = a;
    a = b;
    b = tmp;
}
 
int main()
{
    int a=5;
    int b=10;
    Swap(a,b);//a还是5,b还是10
    return 0;
}

2:地址传递,但交换的是指针指向,a,b并未实现交换

#include"stdio.h"

void Swap(int *p1,int *p2)//传入的是a,b的地址,此时p1指向的是a,p2指向的是b;
{
    int *tmp = p1;//p1的指向地址赋值tmp
    p1 = p2;
    p2 = tmp;//p1,p2指向地址发生交换
}//可是a,b的值并未发生交换
 
int main()
{
    int a=5;
    int b=10;
    Swap(&a,&b);
    return 0;
}

3:传递地址,交换地址从而达到值交换

#include"stdio.h"


void Swap(int *p1,int *p2)//传入地址
{
    int tmp;
    tmp = *p1; //a,b地址发生交换
    *p1 = *p2;
    *p2 = tmp;
}
 
int main()
{
    int a=5;
    int b=10;
    Swap(&a,&b);
    return 0;
}

 4:传入地址,交换指向的另一种写法

#include"stdio.h"


void Swap(int *p1,int *p2)
{
    int *tmp;//交换 的 是指针指向
    tmp = p1;
    p1 = p2;
    p2 = tmp;
}//出了门就不认识了
 
int main()
{
    int a=5;
    int b=10;
    int *p=&a,*q=&b;
    Swap(p,q);//传入的依然是地址
    return 0;
}

 

posted @ 2020-04-20 23:00  Simon1010  阅读(1124)  评论(0编辑  收藏  举报