//例题10-3 输入a,b两个整数,按先大后小的顺序输出a和b,
//现用函数处理,而且用指针类型的数据作函数参数
#include<stdio.h>
int main()
{
void swap(int *p1,int *p2);
int a,b;
int *pointer_1,*pointer_2;
scanf("%d %d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b)
swap(pointer_1,pointer_2);
printf("\n%d %d",a,b);
return 0;
}
void swap(int *p1,int *p2)//交换a,b的值; p1,p2的值不变
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
//输入
//4 8
//输出
//8 4
指针-经典错误1
void swap(int *p1,int *p2)
{
int *tmp; //错误
*tmp=*p1;
*p1=*p2;
*p2=*tmp;
}
错因分析:p1就是a,是整型变量。
而 *tmp 是指针变量tmp所指向的变量。但tmp中并无确定的值, 不知道tmp指向where,所以,对 *tmp 赋值,有可能给一个存储着重要数据的存储单元赋值,这样就会破坏系统的正常工作
指针-经典错误2
//错误示例:
#include<stdio.h>
int main() //意图通过改变 指针形参的值 而使得指针实参的值 改变 ==>错因:单向值传递!
{
void swap(int *p1,int *p2);
int a,b;
int *pointer_1,*pointer_2;
scanf("%d %d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b)
swap(pointer_1,pointer_2);
printf("\n%d %d",*pointer_1,*pointer_2);
return 0;
}
void swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
//输入 3 7
//输出 3 7
错因分析:意图通过改变 指针形参的值 而使得指针实参的值 改变 ==>错因:单向值传递!