预计阅读本页时间:-
有时我们需要用一个函数改变另一个函数中的变量。例如,排序问题的一个常见任务是交换两个变量的数值。假设要交换两个变量x和y的数值:
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
上面这段简单的代码并不能实现这个功能,因为当执行第二行时,x的原数值已经被y的原数值所代替。这就需要另外一行语句对x的原数值进行存储。
现在这段代码就可以实现数值交换的功能,可以将其编写成函数并构造一个驱动程序进行测试。在程序清单9.13中,为了清楚地表明某变量属于函数main()还是属于函数interchange(),前者使用了变量x和y,而后者使用的是u和v。
程序清单9.13 swap1.c程序
程序的运行结果如下:
令人吃惊的是数值并没有发生交换。下面我们在interchange()中加入一些打印语句来检查错误(请参见程序清单9.14)。
程序清单9.14 swap2.c程序
新的输出结果是:
函数interchange()并没有错误,u和v的数值确实得到了交换。问题出现在把执行结果传递给main()的时候。正如已指出的那样,interchange()使用的变量独立于函数main(),因此交换u和v的数值对x和y的数值没有任何影响!使用return语句可以吗?可以在interchange()的结尾处加入下面一行语句:
然后改变main()中对该函数的调用方式:
做了上述更改后,x被赋予了新值,而y的数值并没有改变。因为return语句只能把一个数值传递给调用函数,但现在我们需要传递两个数值。这并非不能实现!只需用指针就可以了。