一、前言
函数是构成c语言的基本单位,如何很好的定义并且引用c语言对于写好一个程序而言至关重要,作为新手刚入门的我们,最主要的就是掌握好两种c语言函数调用方式即可,分别是传值调用和引用调用。下面以具体的程序实例来解释两种调用方式的特点和不同。
二、传值调用
传值调用的特点就是他直接将实参(简单说就是我具体要操作的数值)的数据传递给形参(作为一个形式符号,在子函数中说明他将会进行什么操作)。传值调用的特殊性在于他的操作并不会对变量的值发生改变,也就是说操作完成后a还是a,b还是b。以交换两个数的程序为例。
void swap(int x, int y);#include int main() {/* 局部变量定义 */int a = 100;int b = 200;printf("交换前,a 的值: %d\n", a);printf("交换前,b 的值: %d\n", b);/* 调用函数来交换值 */swap(a, b); printf("交换后,a 的值: %d\n", x);printf("交换后,b 的值: %d\n", y);return 0;}void swap(int x, int y) {int temp;temp = x; /* 保存 x 的值 */x = y;/* 把 y 赋值给 x */y = temp; /* 把 temp 赋值给 y */return;}
在运行完这个程序过后我们会发现他的输出结果为:
从中我们可以发现传值调用并不会对变量本身产生改变,在这种情况下要想输出两个变量交换后的值,那么printf函数必须要放在子函数swap内,这样直接通过子函数输出,因为主函数中a,b未改变
三、引用调用
引用调用,顾名思义就是直接引用变量进行操作,这一操作是通过函数的指针来实现的。通过指针传递变量的地址,可以直接对变量本身进行操作,这就是其和传值调用最大的不同。我们仍然是以交换两个数的程序为例
void swap(int *x, int *y){ int temp; temp = *x;/* 保存地址 x 的值 */ *x = *y;/* 把 y 赋值给 x */ *y = temp;/* 把 temp 赋值给 y */ return;}#include /* 函数声明 */void swap(int *x, int *y); int main (){ /* 局部变量定义 */ int a = 100; int b = 200;printf("交换前,a 的值: %d\n", a ); printf("交换前,b 的值: %d\n", b );/* 调用函数来交换值* &a 表示指向 a 的指针,即变量 a 的地址* &b 表示指向 b 的指针,即变量 b 的地址 */ swap(&a, &b);printf("交换后,a 的值: %d\n", a ); printf("交换后,b 的值: %d\n", b );return 0;}
此代码就是采用了引用调用的方法,他的运行结果如下:
四、结语
以上就是两种函数调用的基本方法,他们各有特色,具体的需要在何处使用什么调用方式,仍然需要依据具体的情况来确定,希望大家多提宝贵意见,欢迎留言!