+ -
当前位置:首页 → 问答吧 → 我想问一下,一下交换方法为什么行不通?

我想问一下,一下交换方法为什么行不通?

时间:2011-12-14

来源:互联网

void exchange(int a,int b){
int t;
t=a;
a=b;
b=t;
}

作者: xiayizhannext   发布时间: 2011-12-14

int a,int b要改成int *a,int *b就可以了
*a=b;*b=t;

作者: flyrack   发布时间: 2011-12-14

函数体中的变量只在函数内有效,要使用指针

作者: a81895898   发布时间: 2011-12-14

这个是传值参数,要用传址参数据,或别名
void exchange(int *a,int *b)

void exchange(int &a,int &b)

作者: LUOYING198791   发布时间: 2011-12-14

引用 3 楼 luoying198791 的回复:
这个是传值参数,要用传址参数据,或别名
void exchange(int *a,int *b)

void exchange(int &a,int &b)
++

作者: zscedu   发布时间: 2011-12-14

这个是单向传递,只能由实参传向形参,可使用指针进行双向传递
void exchange(int *a,int *b){
int t;
t=*a;
*a=*b;
*b=t;
}

作者: jiutianc   发布时间: 2011-12-14

引用 4 楼 zscedu 的回复:

引用 3 楼 luoying198791 的回复:
这个是传值参数,要用传址参数据,或别名
void exchange(int *a,int *b)

void exchange(int &a,int &b)
++

+++

作者: fcmsuck   发布时间: 2011-12-14

值传递和地址传递的问题。你写的程序是值传递,就是说你看到的a和b,只是函数内部的两个变量,函数调用的时候外部参数的值被复制到了函数形参里,所以函数内部的a和b的值是交换了,但是外部变量的值根本没有变化。

作者: feidaosh   发布时间: 2011-12-14

林锐 《高质量 c /c++ 编程》

作者: AnYidan   发布时间: 2011-12-14

......C语言基础 不扎实啊。。。

作者: ouen333   发布时间: 2011-12-14

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。

作者: zhao4zhong1   发布时间: 2011-12-14

void exchange(int a,int b)这里的a,b都是局部变量,传递过来的参数也是源数据的副本,都是在栈上申请的。在函数执行结束后,会自动释放。所以,你需要传递地址过来,这样修改是修改的源数据。能够实现你想要的结果。

作者: cfjtaishan   发布时间: 2011-12-14

局部变量在栈中随着调用的结束,也就撤销了,实参不受影响。

作者: dic_008   发布时间: 2011-12-14