函数

概述

函数可以理解为一段可以复用的代码,对提高代码可读性,优化代码结构有很大的帮助。 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语言代码由上到下依次执行,函数定义要出现在函数调用之前。

但是,如果在函数调用前进行了函数声明,那么函数定义就可以出现在任何地方了,甚至是其他文件。

函数声明的一般形式为:

返回值类型  函数名( 类型 形参, 类型 形参… );

或为:

返回值类型  函数名( 类型, 类型…);