求助:帮忙看段程序,分析一下,谢谢!
#include <stdio.h>
int main()
{
void swap(int * p1,int * p2);
int a,b;
int * pointer_1,* pointer_2;
printf("Please enter two integer number:");
scanf("%d,%d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if (a<b) swap(pointer_1,pointer_2);
printf("max=%d,min=%d\n",* pointer_1,* pointer_2);
return 0;
}
void swap(int * p1,int *p2)
{
int * p;
p=p1;
p1=p2;
p2=p;
}
请问为什么,我输入两个数,比如5和9,它不能正确输出 max=9,min=5,谢谢!
[解决办法]
swap函数得这么写
void swap(int * p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
你写的只是交换指针的值,而不是交换指针所指向的值
[解决办法]
你交换的是swap函数的两个参数,没有交换pointer_1与pointer_2。
*p1与*pointer_1是同一个变量,但p1与pointer_1不是同一个变量。
*p1改变,*pointer_1也同样改变,p1改变则不会影响pointer_1。
你要想交换指针,应该这样:
void swap(int ** p1,int **p2)
//交换int需要int指针
//交换int*需要int*的指针
{
int * p;
p = * p1;
* p1 = * p2;
* p2 = p;
//注意上面代码中那些*号,用了*号后的赋值操作才能影响调用代码中的变量。
}
int main()
{
int a,b;
int * pointer_1,* pointer_2;
printf("Please enter two integer number:");
scanf("%d,%d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if (a<b) swap( & pointer_1, & pointer_2);
//swap改为交换指针了,那么这里也要改为传递指针变量的地址
printf("max=%d,min=%d\n",* pointer_1,* pointer_2);
return 0;
}
[解决办法]
swap改成这样。。你这样修改的只是指针的副本。。
void swap(int * p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
[解决办法]
你把指针作为参数传给函数的时候,只是把指针复制了一份,你在函数里操作的是副本,怎么换都不会影响原指针
但因为指针里面保存的是地址,所以原指针和副本指针指向的东西一定是同一个,你要操作就得操作这个东西,不要操作指针本身