看下这个程序,结果和预计的不一样

hello0world 2007-10-17 03:50:29
#include<stdio.h>
void interchange(int u,int v);
int main(void)
{
int x=5,y=10;
printf("originally x=%d and y=%d.\n",x,y);
interchange(x,y);
printf("now x=%d and y=%d.\n",x,y);
return 0;
)
void interchange(int u,int v)
{
int temp;
temp=u;
u=v;
v=temp;
}
运行结果是
originally x=5 and y=10
now x=5 and y=10
为什么x和y的值没交换
那里出了问题
谁知道
...全文
140 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggggfjeicfh 2007-10-19
  • 打赏
  • 举报
回复
不同意5楼,引用不是指针,指针要创建指针变量,而引用是创建别名,别名不是变量,不开辟内
存空间,也不产生被引用的复本。
ggggfjeicfh 2007-10-19
  • 打赏
  • 举报
回复
你这个程序里面,程序把实参传递给了形参,程序交换的形参的值,而实参,即要操作的对象值并没有变。所以
在C++中这类程序都是用“引用”方式来传递实参的。引用即是“别名”,它们代表同一内存地址的内容,只是
名称不同。所以程序如下:

#include <stdio.h >
void interchange(int &,int &);//////注意这行//////
int main()//////main函数最好不要用void///////////
{
int x=5,y=10;
printf("originally x=%d and y=%d.\n",x,y);
interchange(x,y);
printf("now x=%d and y=%d.\n",x,y);
return 0;
)
void interchange(int &u,int &v)////注意这行//////
{
int temp;
temp=u;
u=v;
v=temp;
}
xiantongyuan 2007-10-19
  • 打赏
  • 举报
回复
看看基础,什么是按值传递,什么是按指针传递,什么又是按引用传递,他们的区别,以及什么时候用那种方式
天亮后说晚安 2007-10-19
  • 打赏
  • 举报
回复
自己写才能有体会
#include <stdio.h >
void interchange(int &u,int &v);
int main(void)
{
int x=5,y=10;
printf("originally x=%d and y=%d.\n",x,y);
interchange(x,y);
printf("now x=%d and y=%d.\n",x,y);
return 0;
)
void interchange(int &u,int &v)
{
int temp;
temp=u;
u=v;
v=temp;
}
ascend_0707 2007-10-17
  • 打赏
  • 举报
回复
三楼的高手具体的帮忙改一下这个程序好吗?我也很想学习一下 !
hello0world 2007-10-17
  • 打赏
  • 举报
回复
这个指针就是对实参进行操作
而一般的函数不用指针的话是不能对实参进行操作的
不知道我这么理解对不对
但是我还是不知道不用指针该怎么改这个程序
ascend_0707 2007-10-17
  • 打赏
  • 举报
回复
没看明白指针的方法!能具体讲一下指针吗?
lxbxl_17 2007-10-17
  • 打赏
  • 举报
回复
c的函数参数只有传值调用
如果你想直接对实参作用的话 在c里面只能通过指针
c++可以通过引用(实质也是指针)。
hello0world 2007-10-17
  • 打赏
  • 举报
回复
我想问下
在所有调用函数的程序中
只是把实参的值赋给形参吗
而不是实参直接代替形参
那要是这样的话
在不用指针的情况下
怎么修改呢
evifree 2007-10-17
  • 打赏
  • 举报
回复
你原来的函数调用interchange(x,y),就是先把实参x, y的值分别付给形参 u,v然后交换u,v,虽然u,v交换了,但是和x,y没关系, 明白?
hello0world 2007-10-17
  • 打赏
  • 举报
回复
不要使用指针
还有这个程序到底是什么地方有问题我想搞清楚
为什么没有交换呢
谁能回答下
evifree 2007-10-17
  • 打赏
  • 举报
回复
函数改为:
void interchange(int* u,int* v);
void interchange(int* u,int* v)
{
int temp;
temp=*u;
*u=*v;
*v=temp;
}
调用时改为interchange(&x,&y);
原函数是void interchange(int u,int v);会直接将实参的值传给形参,这样实参是不会改变的

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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