Pointer.cRUN

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


//按值传递
void Sort1(double a, double b)
{
    if (a > b)
    {
        double temp = a;
        a = b;
        b = temp;
    }
}


//对地址按值传递,指针的值(地址)不会改变。
//但通过指针,可以修改指针指向的内容,即可以在函数里面修改函数外面的数据!
void Sort2(double* pa, double* pb)
{
    if (*pa > *pb)
    {
        double temp = *pa;
        *pa = *pb;
        *pb = temp;
    }
}

//按值传递
void Test1()
{
    double a = 2.2, b = 1.1;
    printf("a = %lf, b = %lf\n", a, b);
    Sort1(a, b);
    printf("a = %lf, b = %lf\n", a, b);
}

//指针作为参数,函数内部可以修改参数指针指向的内存
void Test2()
{
    double a = 2.2, b = 1.1;
    printf("a = %lf, b = %lf\n", a, b);
    Sort2(&a, &b);
    printf("a = %lf, b = %lf\n", a, b);

    //注意,不能以下代码
    if(0)
    {
        double* pa, * pb;
        
        scanf("%lf %lf", pa, pb);//pa和pb并没用指向任何内存空间,此语句出错

        Sort2(pa, pb);

        //可以
        pa = &a, pb = &b;
        Sort2(pa, pb);

        //但这样,不如直接
        Sort2(&a, &b);
    }
}


int main()
{
    Test1();
    Test2();

    return 0;
}