C语言--指针--例题10-3 输入a,b两个整数,按先大后小的顺序输出a和b,现用函数处理,而且用指针类型的数据作函数参数

//例题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 

错因分析:意图通过改变 指针形参的值 而使得指针实参的值 改变 ==>错因:单向值传递!

猜你喜欢

转载自blog.csdn.net/xiaoyue_/article/details/105065993