c语言 指针问题5

来源:百度知道 编辑:UC知道 时间:2024/06/03 20:02:57
#include <stdio.h>
void chang(int *pt1,int *pt2);
main()
{
int *p1,*p2,a,b;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
chang(p1,p2);
printf("%d,%d\n",*p1,*p2);
}
void chang (int *pt1,int *pt2)
{
int t;
if(*pt1<*pt2)
{
t=*pt1;
*pt1=*pt2;
*pt2=t;

}
return;
}
/*如果我把上面的调用的东西改成
void chang (int *pt1,int *pt2)
{
int *t;
if(*pt1<*pt2)
{
t=pt1;
pt1=pt2;
pt2=t;

}
return;
}
为什么输出时还是不变呢?
是不是在调用中子程序的指针里的地址是不可以交换的,
而指针变量可以交换呢??谢谢!*/

前一个程序的2个指针交换的主函数中a,b 的值,直接对内存进行操作。
而后一个程序,子函数中改变的是指针的指向,调用完子函数以后,并没有改变主函数中a,b 的值。因为子函数中的改变并不影响主函数。
我理解的也并不透彻,希望我的回答对你能有些帮助。

你是按由大到小排列吧!
是可以的啊!
输入的时候要:a,b 才行!

第二个函数你是把指针指向的地址改变了,所以结果还是正确的。