C语言中,交换两个指针变量的值(即a和b的地址),而不是交换整形变量的值,这样是算法用在那些地方?
程序如下:#include<stdio.h>/*输入a和b两个整数,按先打后小的顺心输出a和b*/voidmain(){int*p1,*p2,*p,a,b;scanf("...
程序如下:
#include<stdio.h>
/*输入a和b两个整数,按先打后小的顺心输出a和b*/
void main()
{
int *p1,*p2,*p,a,b;
scanf("%d%d",&a,&b);
p1=&a;
p2=&b;
if(a<b)
{
p1=&b;
p2=&a;
}
printf("max=%d,min=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}
/*
请注意,a和b并未交换,他们仍保留原值,但p1和p2的值改变了,p1的值原为&a,后来编程了&b,p2原值为&b,后来变成&a。
这样在输出*p1和*p2时候,实际上输出变量b和a的值,所以先输出9,后输出5.这个问题的算法不是交换整形变量的值,而是
交换两个指针变量的值(即a和b的地址).
*/ 展开
#include<stdio.h>
/*输入a和b两个整数,按先打后小的顺心输出a和b*/
void main()
{
int *p1,*p2,*p,a,b;
scanf("%d%d",&a,&b);
p1=&a;
p2=&b;
if(a<b)
{
p1=&b;
p2=&a;
}
printf("max=%d,min=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}
/*
请注意,a和b并未交换,他们仍保留原值,但p1和p2的值改变了,p1的值原为&a,后来编程了&b,p2原值为&b,后来变成&a。
这样在输出*p1和*p2时候,实际上输出变量b和a的值,所以先输出9,后输出5.这个问题的算法不是交换整形变量的值,而是
交换两个指针变量的值(即a和b的地址).
*/ 展开
3个回答
展开全部
这段代码用在当a,b的值进行交换时需要付出较大代价的时候,那么直接交换指针指向比交换数值来说更容易,并且效率更高!
来自:求助得到的回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
交换指针的值这样的情况比较好,排序的时候有时会用到。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询