一、前言
函数是构成c语言的基本单位,如何很好的定义并且引用c语言对于写好一个程序而言至关重要,作为新手刚入门的我们,最主要的就是掌握好两种c语言函数调用方式即可,分别是传值调用和引用调用。下面以具体的程序实例来解释两种调用方式的特点和不同。
二、传值调用
传值调用的特点就是他直接将实参(简单说就是我具体要操作的数值)的数据传递给形参(作为一个形式符号,在子函数中说明他将会进行什么操作)。传值调用的特殊性在于他的操作并不会对变量的值发生改变,也就是说操作完成后a还是a,b还是b。以交换两个数的程序为例。
void swap(int x, int y);
#include <stdio.h>
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 <stdio.h>
/* 函数声明 */
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;
}
此代码就是采用了引用调用的方法,他的运行结果如下:
四、结语
以上就是两种函数调用的基本方法,他们各有特色,具体的需要在何处使用什么调用方式,仍然需要依据具体的情况来确定,希望大家多提宝贵意见,欢迎留言!