函数间的通信有三种流:向下流、向上流、双向流。
向下流:主调函数->被调函数。例如将数据传递给打印函数。
向上流:被调函数->主调函数。C语言中只提供了return语句来实现向上流。若要实现其他形式的向上流(例如在被调函数里从键盘读取数据,再传递给主调函数),可以先把主调函数里的变量地址传递给被调函数,被调函数声明一个变量来存放主调函数传来的地址。然后对地址进行操作。例如:
1 #include <iostream> 2 using namespace std; 3 4 void swap(int *, int *); 5 int main(void) 6 { 7 int a = 10; 8 int b = 20; 9 cout << "a = " << a << ", b = " << b << endl; 10 swap(&a, &b); 11 cout << "a = " << a << ", b = " << b << endl; 12 13 system("pause"); 14 return 0; 15 } 16 void swap(int *a, int *b) 17 { 18 int temp; 19 temp = *a; 20 *a = *b; 21 *b = temp; 22 }
结果如下
a = 10, b = 20
a = 20, b = 10
若要从键盘内读取数据存放,则使用scanf即可。因为scanf函数就是对地址进行操作的。
通过类似上文的方法,可以实现从被调函数向主调函数的数据传递。
双向流:主调函数传递数据给被调函数,同时或者在过程结束时,被调函数也将数据返还给主调函数。过程与向上流类似。