首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮忙看段程序,分析一下,多谢

2013-06-26 
求助:帮忙看段程序,分析一下,谢谢!#include stdio.hint main(){void swap(int * p1,int * p2)int a,bi

求助:帮忙看段程序,分析一下,谢谢!
#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;
}
你写的只是交换指针的值,而不是交换指针所指向的值
[解决办法]

引用:
指针的值交换之后,* pointer_1和* pointer_2的值不是也跟着变化了吗?

你交换的是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;
}

[解决办法]
你把指针作为参数传给函数的时候,只是把指针复制了一份,你在函数里操作的是副本,怎么换都不会影响原指针
但因为指针里面保存的是地址,所以原指针和副本指针指向的东西一定是同一个,你要操作就得操作这个东西,不要操作指针本身

热点排行