清华大学出版社 TSINGHUA UNIVERSITY PRESS (a=9,B=5)
(a=9,B=5)
清华大学出版社 TSINGHUA UNIVERSITY PRESS pl pl &a &.a a pointer l pointer_1 5 pointer l pointer_1 &.a &.a &.a &.a pointer_2 p2 p2 pointer2 &.b &.b &b &b 5 pointer_2 9 pointer_2 &b &b (a) (6b) (c) (d) 图10.9
图10.9
清华大学出版社 TSINGHUA UNIVERSITY PRESS 请注意交换*p1和*p2的值是如何实现的。如果写成 以下这样就有问题了: Swap(int *pl,int *p2) {int temp; *temp=*pl;/此语句有问题*/ p1=*p2; p2=*temp; pl就是a,是整型变量。而*temp是指针变量temp所 指向的变量。但temp中并无确定的地址值,它的 值是不可预见的。*temp所指向的单元也是不可
请注意交换*p1和*p2的值是如何实现的。如果写成 以下这样就有问题了: Swap(int *p1,int *p2) {int temp; *temp=*p1; /*此语句有问题*/ p1=*p2; p2=*temp; } p1就是a,是整型变量。而*temp是指针变量temp所 指向的变量。但temp中并无确定的地址值,它的 值是不可预见的。*temp所指向的单元也是不可
清华大学出版社 TSINGHUA UNIVERSITY PRESS 预见的。因此,对*temp赋值可能会破坏系统的 正常工作状况。应该将*p1的值赋给一个整型变量, 如程序所示那样,用整型变量temp作为临时辅助 变量实现*pl和*p2的交换。 注意:本例采取的方法是:交换a和B的值,而p1和 p2的值不变。这恰和例10.2相反。 可以看到,在执行Swap函数后,变量a和B的值改变 了。请仔细分析,这个改变是怎么实现的。这个 改变不是通过将形参值传回实参来实现的。请读 者考虑一下能否通过下面的函数实现a和B互换
预见的。因此,对*temp赋值可能会破坏系统的 正常工作状况。应该将*p1的值赋给一个整型变量, 如程序所示那样,用整型变量temp作为临时辅助 变量实现*p1和*p2的交换。 注意: 本例采取的方法是:交换a和B的值,而p1和 p2的值不变。这恰和例10.2相反。 可以看到,在执行Swap函数后,变量a和B的值改变 了。请仔细分析,这个改变是怎么实现的。这个 改变不是通过将形参值传回实参来实现的。请读 者考虑一下能否通过下面的函数实现a和B互换
清华大学出版社 TSINGHUA UNIVERSITY PRESS Swap(int x,int y) {int temp; temp=x; x-y; y=temp; 如果在main函数中用“Swap(a,B);”调用Swap函数, 会有什么结果呢?如图10.10所示。在函数调用时, a的值传送给x,B的值传送给y。执行完Swap函数 后,x和y的值是互换了,但main函数中的a和B并 未互换。也就是说由于“单向传送”的“值传递” 方式,形参值的改变无法传给实参
Swap(int x,int y) {int temp; temp=x; x=y; y=temp; } 如果在main函数中用“Swap(a,B);”调用Swap函数, 会有什么结果呢?如图10.10所示。在函数调用时, a的值传送给x,B的值传送给y。执行完Swap函数 后,x和y的值是互换了,但main函数中的a和B并 未互换。也就是说由于“单向传送”的“值传递” 方式,形参值的改变无法传给实参