指针问题8

来源:百度知道 编辑:UC知道 时间:2024/07/07 12:02:36
#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); //问题1:这里p1是指针变量,但为什么可以将p1赋值给形参的*pt1呢??
p1不是表示&a马?
printf("%d,%d\n",*p1,*p2);
}
void chang (int *pt1,int *pt2) //问题2:*pt1在这里表示什么意思?它表示是&a还是表示a这个变量呢??
{
int t;
if(*pt1<*pt2)
{
t=*pt1; //问题3:这里的*pt1和形参的*pt1意思是一样的马??
*pt1=*pt2; //问题4:*pt1不是应该表示一个变量马??不是说子程序内的改变并不影响主函数中的
数值马??
*pt2=t;

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

}
return;
}
问题5:为什么输出时还是不变呢?
是不是在调用中子程序的时候只有指针和数组下标可以改变,而数值的话就不可以改变呢??谢谢!希望各位高手能一一回答我的问题,谢谢!*/

你不要把int* pt1看成int和*pt1啊,int*表示声明一个整型指针,int* pt1就表示pt1是一个整型指针。

*pit就表示一个整型了。记住有星号表示值,没有星号表示指针。

用指针调用会把内存的东西改了的,p1,p2都是地址,*p1,*p2就是在p1,p2那位置开始的单元所记录的一个整型的值,把地址传进函数,然后改了内存单元的内容,*p1,*p2当然就变了啦。

t=pt1;
pt1=pt2;
pt2=t
这三句只是改了指针的指向,且t,pt1,pt2都是局部变量,一点意义都没有。
函数结束后*p1和*p2的内容根本没有改变。