周游C语言教程7 - 函数
这是周游C语言的第七篇教程,你将在这篇文章里认识函数。
函数
函数就是一组代码,调用这个函数就会执行一遍函数中的代码。每个程序都至少有一个函数,既mian函数,程序都是从main函数开始执行。通常我们会将某些单一功能写成一个函数,方便我们后续程序的编写,同时也会是的程序更加简洁,提高可读性。C语言的标准库中提供了大量的标准函数,比如size_t strlen(const char *str) ,这个函数可以通过输入字符串得出字符串的长度。
定义函数
返回类型 函数名(参数列表)
{
函数体;
return 返回值;
}
返回类型
一个函数可以有一个返回类型,意思是这个函数运行完成之后会返回这么一个类型的值,它的具体数值有函数体中return 后面跟的数值决定。如果return 的数和返回类型不同则会报错,需要强制转换数据类型。
如果不需要返回任何数据,那么可以将返回类型定义为空,既void 。
函数名
函数名是给这个函数体定义的名字,在其他地方调用这个函数就需要使用这个函数名调用。
参数列表
参数列表是给定的初始条件,根据不同的参数列表可以计算出不同的返回值。比如计算年收入,假定年收入由月工资和年终奖两部分组成,那么参数列表就应该是月工资和年终奖。
参数列表可以为空,表示没有需要指定的值。
函数体
函数体由一个{} 包裹,调用一个函数就是调用这个函数体中内容。
return
return是一个函数结束的标志,当语句运行到return处时就会退出当前函数,无论下方是否还有程序语句。如果返回类型不为空,那么return后面必须跟随一个值,这个值就是调用该函数之后得到的值。如果返回类型为空,那么return将单独出现,或者无论如何函数中的所有语句都必须执行完,return也可以省略(仅限返回类型为空)。
int cal_money(int salary,int yearEndBonus)
{
int allMoney = 0;
allMoney = 12*salary+yearEndBonus;
return allMoney ;
}
函数声明
函数声明会告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。 函数声明中的参数名称可以省略,但是参数类型必须定义。比如上述代码可以使用如下声明
int cal_money(int salary,int yearEndBonus);
也可以
int cal_money(int ,int );
如果在调用函数之前没用定义函数或者声明函数,那么编译器将会报错。
函数调用
调用函数之前请确保函数已经被定义或者已经被声明,掉用需要使用函数名并且给定参数列表的参数。
#include <stdio.h>
int cal_money(int salary, int yearEndBonus);
int main()
{
int money = 0;
int salary_t = 8000;
int yearEndBonus_t = 10000;
money = cal_money(8000, 10000);
printf("今年赚了%d元\n",money);
money = cal_money(salary_t, yearEndBonus_t);
printf("今年赚了%d元\n", money);
}
int cal_money(int salary, int yearEndBonus)
{
int allMoney = 0;
allMoney = 12 * salary + yearEndBonus;
return allMoney;
}
注意
定义函数时,如果存在参数列表,那么就必须定义对应的参数变量,这些变量被称为形式变量,他们将在函数调用时被创建,在函数退出时被销毁。参考下方代码
#include <stdio.h>
void change_num(int num);
int main()
{
int out_num = 100;
change_num(out_num);
printf("%d\n", out_num);
}
void change_num(int num)
{
num = 10;
}
我们的本意是把所有输入函数的参数都变成10,但是运行程序发现最后num的值任然为100。这是因为函数调用时创建了一个变量num,程序将自动把out_num的值赋值给num,而程序运行完成,num被销毁,out_num任然是那个out_num。可以看成下面的代码
#include <stdio.h>
int main()
{
int out_num = 100;
int num = out_num;
num = 10;
printf("%d\n", out_num);
}
|