c++初级问题,麻烦近来看看,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/05/28 16:27:41
一段程序后的说明:
“在函数swap()中交换了两个参数的值,但是交换的结果并不能改变实参的值,所以调用函数后,变量a和b的值仍为原来的值。”
明明定义了类似t=a;a=b;b=t这样的交换,为什么输出后a,b的值没变呢,那t=a;a=b;b=t又是改变了什么?有什么意义啊```最好举例说明下,谢谢大家!```

这是一个很学习语言的过程中会遇到的一个很常见的问题:值传递与引用传递。
按值传递参数,实质上是将实参的值复制一份给形参,因此形参获得的是实参的副本,当过程执行中对形参进行改变,并 不会影响实参本身;
按地址传递参数,实质上是将实参变量的地址传递给形参,因此形参与实参将指向同一内存单元,当过程执行中形参发生改变时, 对应实参也将跟着改变。
也就是说你改变的是行参值,实体值并没有发生变化。

这个程序可能没有通过传址得方式交换.
所谓传址,是直接对变量的地址操作,例如:
void swap (int *a, int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
}

或者:
void swap (int &a, int &b)
{
int t;
t = a;
a = b;
b = t;
}

你所看到的函数大概是这样的:
void swap (int a, int b)
{
int t;
t = a;
a = b;
b =t;
}
所以没有对实际值进行交换。

main
{int a ,b} 这里的a和b是2个变量
swap(a,b) 调用a b 把a 给x 把b给y 只能单向传递, 调用后x y的值并不返回给a b

int swap(int a,int b)
{t=a;a=b;b=t} 这里的a和b是另外2个变量,当然可以把a b改成x y.

这下清楚了.swap里交换的是 x y 这2个值.但mian里的a b还是没变.

main 里的a b 和swap里的 x y 存放地址不一样.

研究形参实参无意义.只要a,b的值确实发生改变了影响了计算结果就OK了.

应该是你在调用函数中的值交换了,
却没有把值返回到主函数中

这是因为swap函数的参数使用的是传