c语言用指针交换两个变量

#include<stdio.h>
#include<math.h>

int  main(){
    void swap(int a,int b);
    void swapPointer(int* p1, int* p2);
    int a = 10, b = 20;
//    swap(a, b);
    swapPointer(&a, &b); // &a 是 int* 类型 
    printf("main: a = %d, b = %d\n",a, b);
}

//值传递,传递副本值 ,只是交换了a b的副本值,原有值没有交换
void swap(int a, int b){
    int temp;
    temp = a;
    a = b;
    printf("swap: a = %d, b = %d \n",a, b);
    b = temp;
}

//引用传递,传递原变量地址 
void swapPointer(int* p1, int* p2){
    int temp;
    temp = *p1; //指针 p1 所存地址中的内容,赋给 temp 
    *p1 = *p2;
    *p2 = temp;
}

swap函数是值传递,传递给实参的是形参的副本值,形参本身的值没有变。

swapPointer()是引用传递,在调用swapPointer(&a, &b);时,a、b的地址就传给了指针变量p1、p2,*p1=10,*p2=20。然后交换*p1、*p2的值(*p1 = *p2;是交换两个地址中的值,p1=p2是把p2中的地址值也改成了0x62fe1c)。

posted @ 2020-11-11 11:32  sunshine233  阅读(972)  评论(0编辑  收藏  举报