为什么函数已被调用,输出结果却没变?

lye 2002-09-14 10:09:30
#include<stdio.h>
void swap(int *x,int *y)
{
int *z;
if(*x>*y){z=x;x=y;y=z;}
printf("%d,%d\n",*x,*y);
}
void main(){int a,b; int *p1,*p2;p1=&a;p2=&b;
printf("input a,b\n");
scanf("%d,%d",&a,&b);
swap(p1,p2);
printf("%d,%d\n",*p1,*p2);

}
结果应该是:
input a,b
2,1
1,2
1,2
经过运行却是:
input a.b
2,1
1,2
2,1
请大家指点!
...全文
249 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyb_17flash 2002-09-14
  • 打赏
  • 举报
回复
在C中函数的参数调用是遵循单向的值传递,即在你的程序中指针,x,y分别是主程序指针p1,p2的副本,在子函数调用的过程中,程序是在堆栈中申请一部分空间作临时的函数运行空间,当结束调用时便会释放这一部分空间,所以在函数中的指针值得改变不会影响原来调用函数中的值.这一点是很重要的!
在你的程序中犯的错误,这是第一点!
第二点就是要正确理解指针的实际意义,它是指向地址的变量,里面只能指示地址,不要妄想在函数的调用过程中通过改变指针值来改变参数值!如果要改变该值,则需对指针指向的变量空间的值进行改变,如ckc所写的那样,通过改*X来改变!因为指针所指向的变量是在主函数中申请的,(在子函数结束调用时他的实际空间还是存在的)即变量a,b你可以在函数中通过改变这两个变量的值来改变返回后的变量值!
jieshen 2002-09-14
  • 打赏
  • 举报
回复
在函数中的参数可以用值传递(调用后不变),还有是用指针和引用来传递实参
(调用后会变)。
lye 2002-09-14
  • 打赏
  • 举报
回复
我想交换指针p1,p2而不是a,b的值!!
lye 2002-09-14
  • 打赏
  • 举报
回复
谢谢ckc!你能告诉我错在哪里了吗?
lx_cyh 2002-09-14
  • 打赏
  • 举报
回复
void swap(int *x,int *y)
{
int z;
if(*x>*y){z=*x;*x=*y;*y=z;} //在此处你要改变底是*x与*y的值
//而不是x与y的值
printf("%d,%d\n",*x,*y);
}
netbian 2002-09-14
  • 打赏
  • 举报
回复
来晚了
:)
搂主看看书吧
这是很基础的
ckc 2002-09-14
  • 打赏
  • 举报
回复
void swap(int *x,int *y)
{
int z;
if(*x>*y){z=*x;*x=*y;*y=z;}
printf("%d,%d\n",*x,*y);
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧