课程首页 › 第6部分 › 第84课

第84课 函数里的交换

第6部分 C++ 的灵魂 · 指针· 知识点:指针、指针与函数

函数里的交换(指针、指针与函数)

函数中两种不同的写法却带来了不一样的结果,这就是函数里交换的秘密,我们一起去探寻一番这其中的奥秘。有两个函数,一个改变了主函数中变量的值,另一个却改变不了,这是为什么呢?

函数中交换的秘密

插图

运行程序:

程序分析

(1)swap(num1,num2)执行完成后为什么数字没有交换呢?因为这里仅仅是传入了num1和num2的值,只是将num1赋值给了x,将num2赋值给了y,接下来就是函数里的变量x和y的操作了,与主函数里的变量num1和num2无关了。

插图

变量x和y属于形参变量,它们只有在函数被调用时才会分配内存,函数调用结束后随之被销毁,形参变量只有在函数内部有效,作用不到函数外部。

(2)swapAddress(&num1,&num2)则是将变量num1和num2的地址传递给了函数,然后在函数中通过地址操作了实际内存中的值,再对它们进行了交换。这其实是对匹配地址里的数据进行了交换,所以做到了实质性的修改。

插图
插图

所以最终交换的是变量num1和变量num2的值。

巩固练习

(1)仔细阅读以下程序,根据变量值的变化,正确的输出结果是()。

插图

A.1 2

B.1 3

C.8 10

D.8 2

(2)阅读以下程序,仔细分析,都代表地址的一组选项是()。

插图

A.p &a*p

B.p &*p &a

C.&p a &*a

D.&p &a

(3)阅读以下程序代码,填写程序的输出结果。

插图

输出:_____________________________________________________________ _____