Pointer.c,RUN
#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;
}