参数列表
在函数的定义格式中,函数中的“(参数类型 参数名1,参数类型 参数名2,…,参数类型 参数名n)”被称作参数列表,它用于描述函数在被调用时需要接收的参数。如果函数不需要接收任何参数,则参数列表为空,这样的函数被称为无参函数。相反地,参数列表不为空的函数就是有参函数。接下来分别讲解这两种函数。
1、无参函数
在C语言中,无参函数的定义很简单,先来看一个定义无参函数的示例代码,具体如下:
void func()
{
printf("这是一个无参函数!\n");
}
上述示例代码中,func()函数就是一个无参函数,参数列表为空。要想执行这个函数,只需要在main()函数中调用它,具体如例1所示。
例1 noPara.c
1 #include <stdio.h>
2 void func()
3 {
4 printf("这是一个无参函数!\n");
5 }
6 int main()
7 {
8 func();
9 return 0;
10 }
例1运行结果如图1所示。
图1 例1运行结果
从图1可以看出,func()函数被成功调用了。在程序中,第2~5行代码定义了一个无参函数func();第3~5行代码是func()函数的函数体;第8行代码在main()函数中调用该无参函数。
需要注意的是,定义无参函数时,即便函数参数列表为空,函数名后面的小括号也不能省略。小括号是函数的标识,没有小括号,编译器会报错。错误示例代码如下:
void func //错误,func后面缺少()
{
printf("这是一个无参函数!\n");
}
上述代码中,定义func()函数时省略了小括号,编译器不认为func是一个函数,会提示在后面添加小括号。
2、有参函数
与无参函数相比,定义有参函数时,需要在函数名称后面的括号中填写参数,所谓的参数相当于就是一个变量,用于接收调用者传入的数据。但是,函数参数在定义时只是一个形式上的变量,并不真实存在,即编译器不会为其分配内存,因此参数列表中的参数名被称为形式参数,简称为形参。调用有参函数时,调用者会向函数传入具体的数据,这些数据是实际存在的,也被称为实际参数,简称为实参。
下面定义一个有参函数swap(),该函数用于实现大小写字母转换,在main()函数中调用swap()函数完成字母大小写转换,具体如例2所示。
例2 swap.c
1 #include <stdio.h>
2 char swap(char ch)
3 {
4 char c;
5 if (97 <= ch && ch <= 122) //小写英文字母的ASCII码值为97~122
6 c = ch - 32; //大写英文字母ASCII码值比对应小写字母的ASCII码值小32
7 else if (65 <= ch && ch <= 90)
8 c = ch + 32;
9 else
10 printf("传入的字符不是英文字母!\n");
11 return c;
12 }
13 int main()
14 {
15 char c = swap('a'); //调用swap()函数,将返回值保存到变量c中
16 printf("%c\n", c); //输出转换后的结果
17 return 0;
18 }
例2运行结果如图2所示。
图2 例2运行结果
在例2中,自定义函数swap()是一个有参函数,它有一个参数ch,ch就是形式参数,第15行代码在main()函数中调用swap()函数,传入了字符‘a’,则字符‘a’就是实际参数。由图2可知,程序成功调用了swap()函数将小写字符‘a’转换为了大写。
需要注意的是,形参和实参之间的数据传递是单向的,即只能由实参传递给形参,不能由形参传递给实参。