关于C语言的指针问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 20:57:26
#include<stdio.h)
void main()
{int *p1,*p2,*p,a,b;
scanf("% d,% d d",&a,&b);
p1=&a;p2=&b;
if(a<b)
{p=p1;p1=p2;p2=p;}
printf("a=%d,b=%d\n",a,b,);
printf("max=%d,min=%d\n",*p1,*p2;
}
输入5和9两个数
这里的A=5,B=9怎么会不换值呢,if(a<b)
{p=p1;p1=p2;p2=p;}他是在IF后面输出啊。
还有MAX和MIN都没定义。
请高手能详细说明,谢谢。

p1,p2是分别指向a,b的指针。p1,p2存的是a,b在内存的地址。
if(a<b)
{p=p1;p1=p2;p2=p;}
执行后,p1,p2交换。即p1指向b,p2指向a。
而a,b的值没有变化。
max,min都是字符串,不是变量。

你有没调试过,应该是scanf()的""内有问题,我这运行是可以的

p,p1,p2是三个整形指针
p1=&a,是把指针指向整型变量a的地址
p2是同理的

当你判断a<b成立时

p=p1 将p指针指向a的地址
p1=p2 p1指针指向b地址
p2=p p2指针执行a地址
上面三步只是交换了p1,p2指针执行的地址而已,并没有改变该地址的存放内容
所以你输出a,b,结果不变

想改变a的值应该用 (*p1)=xxx

你说的max,min没有赋值不知道是什么意思
这里max,min只是输出的字符串常量,不需要赋值