学科分类
目录
C语言

函数的定义

在C语言中,定义一个函数的具体语法格式如下:

返回值类型 函数名(参数类型 参数名1,参数类型 参数名2,……,参数类型 参数名n)
{ 
  执行语句
  ……… 
  return 返回值;
}

上述语法格式中,各项的含义具体如下。

● 返回值类型:用于限定函数返回值的数据类型。例如,当函数返回一个int类型的数据时,返回值类型就是int。

● 函数名:表示函数的名称,该名称可以根据标识符命名规范来定义。

● 参数类型:用于限定函数调用时传入函数中的参数数据类型。

● 参数名:函数被调用时,用于接收传入的数据,参数名可以根据标识符命名规范来定义。

● return关键字:用于结束函数,将函数的返回值返回到函数调用处;

● 返回值:被return语句返回的值,该值会返回给函数调用者。

根据上述函数定义格式,下面定义一个函数,用于实现两个int类型数据的求和功能,并将求和结果返回给调用者,示例代码如下:

int add(int a, int b)
{
    int sum;
    sum = a + b;
    return sum;
}

上述代码中,add()函数的返回值类型为int,有两个int类型的参数a与b。在函数体内,首先定义了一个int类型的变量sum,然后将参数a与b相加的结果赋值给sum,最后使用return关键字将sum返回。当有调用者调用add()函数时,传入相应的参数值,就会得到相应的求和结果。在main()函数中调用add()函数,具体如例1所示。

例1 add.c

 1    #include <stdio.h>
 2    int add(int a, int b)
 3    {
 4        int sum;
 5        sum = a + b;
 6        return sum;
 7    }
 8    int main()
 9    {
 10        int ret1 = add(1, 3);        //调用add()函数,传入数据1、3
 11        int ret2 = add(5, 6);        //调用add()函数,传入数据5、6
 12        int ret3 = add(12, 100);    //调用add()函数,传入数据12、100
 13        printf("ret1 = %d\n", ret1);
 14        printf("ret2 = %d\n", ret2);
 15        printf("ret3 = %d\n", ret3);
 16        return 0;
 17    }

例1运行结果如图1所示。

图1 例1运行结果

在例1中,第2~7行代码定义了add()函数;第10~12行代码调用了三次add()函数,每次传入不同的数据,并将结果分别赋值给变量ret1、ret2、ret3。第13~15行代码调用printf()函数将结果输出。由图1可知,程序输出结果正确无误,表明add()函数成功调用。

函数不能嵌套定义,即不能在一个函数中再定义另外的函数,错误示例代码如下:

int add(int a, int b)            //定义add()函数
{
    int sum;
    sum = a + b;
    return sum;
    char sub(int x, int y)        //在add()函数内部定义sub()函数,错误
    {
        int sum = x - y;
        return sum;
    }
}

另外,需要注意的是,函数的“定义”与“声明”并不是一个意思,“定义”是指对函数功能的确立,函数的定义是一个完整的、独立的函数单位。函数的声明则是把函数名、参数列表、返回值类型通知编译系统,以便在调用时系统按照此声明进行对照检查。通俗的说法,函数定义有函数体,函数声明没有函数体。

在C语言中,函数声明有两种形式,具体如下:

返回值类型 函数名(参数类型1 参数名1,参数类型2 参数名2,…参数类型n 参数名n);
返回值类型 函数名(参数类型1,参数类型2,…参数类型n);

上述两种方式都可以声明函数,第一种声明方式,参数列表有参数类型和参数名;第二种声明方式,参数列表中只有参数类型,没有参数名。有些编程人员喜欢用第二种形式,格式精炼;有些人则更愿意用第一种形式,不易出错,并且用有意义的参数名增加了代码的可读性。

例如,声明例1中的add()函数,示例代码如下:

int add(int a,int b);
int add(int, int);
点击此处
隐藏目录