函数
概述
函数可以理解为一段可以复用的代码,对提高代码可读性,优化代码结构有很大的帮助。 C语言本身自带了很多库函数,并按照类别存放在不同的头文件中,使用时只要引入对应的头文件即可。
参数
函数名后面需要接括号,括号中的数据或变量称为参数,参数表示函数需要处理的数据,在面向对象编程中,称之为传递的消息。
strlen(str1)用来计算字符串的长度,其中str1就是参数,表示需要求长度的字符串
返回值
返回值指的是函数执行的结果,返回给函数的调用者。
函数的定义
返回值类型 函数名(参数列表) {
函数体
}
参数也是变量,因此在定义的时候需要指明参数类型以及参数名称,用,分隔.当遇到return的时候,结束执行,返回值。
代码示例#2.4.1-函数声明
#include <stdio.h>
int maxVal(int a, int b)
{
int result = (a > b) ? a : b;
return result;
}
int main()
{
int n1, n2, max;
printf("Input 2 numbers:\n");
scanf("%d %d", &n1, &n2);
max = maxVal(n1,n2);
printf("Max Value:%d\n", max);
return 0;
}
函数的参数
函数的参数分为形参和实参。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在函数调用中。
形参和实参的功能是作数据传送,发生函数调用时,实参的值会传送给形参。
形参和实参有以下几个特点:
1) 形参变量只有在函数被调用时才分配内存单元,在调用结束时,立刻释放所分配的内存单元。因此,形参只有在函数内部有效,不能在函数外部使用。
2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。
函数的调用
函数名(实参列表);
比如上述代码示例中调用求最大值的函数
maxValue(n1,n2);
代码示例#2.4.2-函数嵌套
#include <stdio.h>
long factorial(int n);
long sum(long n); //函数声明
int main()
{
printf("1! + 2! + ... + 10! = %d\n", sum(10));
return 0;
}
long factorial(int n)
{
int i;
long result = 1l;
for (int i = 1; i <= n; ++i)
result *= i;
return result;
}
long sum(long n)
{
int i;
long result = 0;
for (int i = 1; i <= n; ++i)
result += factorial(i);
return result;
}
函数声明和函数原型
C语言代码由上到下依次执行,函数定义要出现在函数调用之前。
但是,如果在函数调用前进行了函数声明,那么函数定义就可以出现在任何地方了,甚至是其他文件。
函数声明的一般形式为:
返回值类型 函数名( 类型 形参, 类型 形参… );
或为:
返回值类型 函数名( 类型, 类型…);