DAVID J.马兰:让我们在写一个程序 我们尝试交换的价值 两个变量,x和y。 事先,我已经写了很多 这一计划已经的。 首先,我声明了一个变量x, 并存储在它的价值,1。 然后我声明变量y和 在其存储的值,2。 然后,我继续printf显示 这两个变量的值。 然后我要求与其他的printf 将交换这些变量。 然后,我调用了交换功能。 然后我要求的变量 已互换。 然后我打印出了什么我要求 是x和y的新值。 那么什么是这个函数swap? 这不是自带的C。 事实上,如果我们看一下顶部我 文件,你会发现,我已经声明 原型为这个函数swap 指定,它需要两个整数, 任意地称为a和b,并且此 函数不返回任何东西。 因此推测,它做什么,它说 在掉期和b的值。 现在让我们来实现交换。 首先,我要声明一个临时 变量,并分配给它 在a的值,虽然我可以只 因为容易储存在里面湾 我当时要去改变数值 的是等于b中。 然后最后,我要改变 的B值是什么了,但 现在的温度。 现在,我要求什么我刚刚做 在逻辑上是正确的。 我已经存储在一个临时变量, 改变了的值是B的,然后 改变B的值是什么的了。 但是,当我编译并运行此 程序,我担心这不是 将我所看到的。 作,没有交换。 点斜线,没有交换。 不幸的是,根据printf的, x和y的值,即使 之后我们声称要​​交换 它们仍然是1和2。 现在,这是为什么? 嗯,事实证明,在主,当我们 调用这个函数的交换,传递 x和y作为参数,它实际上 x和y的副本即 传递到交换。 即,它们的值1和2是 通过掉期为a和b。 而且它是a和b,我们是最终 交换主。 即,1变为2,2变为1。 但由于交换没有返回值 并且,因为它接收到的x副本 和y,它的行为已 关于x和y的任何效果。 事实上,a和b的作用域,可以这么说, 交换,而x和y保持 作用域主。 因此,我们有一个问题。 但如何解决它?