函数间的通信有三种流:向下流、向上流、双向流。
向下流:主调函数->被调函数。例如将数据传递给打印函数。
向上流:被调函数->主调函数。C语言中只提供了return语句来实现向上流。若要实现其他形式的向上流(例如在被调函数里从键盘读取数据,再传递给主调函数),可以先把主调函数里的变量地址传递给被调函数,被调函数声明一个变量来存放主调函数传来的地址。然后对地址就行操作。例如:
#include <stdio.h> void f(int* num1, int* num2); int main() { int num1 = 0; int num2 = 0; f(&num1, &num2); printf_s("num1 is %d, num2 is %d.", num1, num2); return 0; } void f(int* num1, int* num2) { *num1 = 2; *num2 = 3; }
结果如下
num1 is 2, num2 is 3.
若要从键盘内读取数据存放,则使用scanf_s即可。因为scanf函数就是对地址进行操作的。
通过类似上文的方法,可以实现从被调函数向主调函数的数据传递。
双向流:主调函数传递数据给被调函数,同时或者在过程结束时,被调函数也将数据返还给主调函数。过程与向上流类似。