分析并对比如下2个程序,写出运行结果(用C)

来源:百度知道 编辑:UC知道 时间:2024/05/07 00:46:23
1.1 main()
{int *p1,*p2,*p,a,b;
a=5;b=9;
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”,*p1,*p2);}
1.2 main()
{int *p1,*p2,p,a,b;
a=5;b=9;=
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”,*p1,*p2);}

1.1结果如下所示:
a=5,b=9
max=9,min=5

1.2结果如下所示:
a=9,b=5
max=9,min=5

分析:两题结果的差异就出现在if语句中
1.1if语句后为p=p1;p1=p2;p2=p;此时的p是个整形的指针。此时的交换只是简单的交换了p1和p2的指向,即p1和p2由原来的指向a和b交换为p1指向了b而p2指向了a,但是ab的内容并没有改变;
在1.2中,此时定义的p为整形的变量而非指针。语句p=*p1;*p1=*p2;*p2=p;交换的是p1和p2所指向的地址的内容,即将由p1和p2指向的a和b的内容交换了,此时a的内容为b,而原来的b的内容为a的了,所以输出时显示ab内容变化了。

其他的部分两题意义是相同的,这里就不在啰嗦了,最后祝你的问题早日解决,呵呵!