vlambda博客
学习文章列表

C语言之函数详解(一)

点击上方“蓝字”带你去看小星星
C语言中函数与数学中的函数有所不同,某些函数可以理解为数学中两个不为空集的集合间的一种对应关系,但对于函数最好的理解是能实现某些功能的代码段。个人认为函数是编程语言中非常重要的一部分内容。熟练掌握函数,不仅能封装能实现某些功能的代码段,使程序更容易读懂,而且在编写头文件时具有重要作用。
函数介绍
C语言之函数详解(一)
我相信,每一位接触过C语言的同学都已经对函数有了一定的认识,但我还是决定在此做个简单介绍。
C语言之函数详解(一)

使用过C语言编写程序的同学一定都认识了一个函数,那便是主函数main()。有所区别的是有些人刚认识的主函数形式是:int main(){},而有些人刚认识的主函数形式是:void main(){},其实这两种形式的主函数可以说都是正确的,详细情况在下面介绍完返回类型后说明。大家之所以认识主函数mian()很大可能是在刚开始学习时被告知代码要写在主函数mian()的大括号{}内。


以程序Hello World为例

1#include<stdio.h>
2int main()
3
{
4    printf("Hello World!\n");
5    return 0;
6}

如果将代码printf("Hello World!\n");移至大括号则程序直接无法编译。


除此之外,关于主函数还有两点需要知道:

1、每一个C程序有且只有一个主函数

2、主函数是整个程序的入口和出口

从这两点不难看出编写或解读一个程序时应该从主函数开始。在C程序中主函数是必不可少的,但除主函数还可以有其他函数(包括头文件内的函数、自定义的函数)。由于主函数是程序的入口和出口,所以只有在主函数内被调用的其他函数才能在程序中发挥作用。

函数的定义与声明
1
函数的定义

C 语言中的函数定义的一般形式如下:

返回类型 函数名称(参数){函数主体}
如函数int sum(int munber1,int munber2){return munber1+munber2;}
其中,返回类型为int,即调用该函数时会返回一个int类型的数据
函数名称为sum,即通过函数名sum调用该函数
参数为两个int类型的数据,即调用该函数时需要传入两个int类型的数据
函数主体为return munber1+munber2;,即返回munber1+munber2的值

返回类型:表示的是函数返回值的数据类型(即可根据返回数据的类型选用int、double、float等数据类型),若函数无返回数据则使用void表示无返回。函数有无返回数据是由函数中是否存在return语句决定,若存在return语句则表明该函数有返回值,而函数返回类型应与return后返回数据的类型一致。

#返回类型
int fun1(){return 1;}
double fun2(){return 0.1;}
void fun3(){}
函数fun1存在return语句,且返回的数据为1int类型,所以该函数的返回类型为int
函数fun2也存在return语句,但返回的数据为0.1double类型,所以该函数的返回类型为double
函数fun3不存在return语句,所以无返回值,该函数的数据类型为void

函数名称:函数名称与变量名类似,由用户自行选取。C语言不支持函数重载,所以函数名称必须是唯一的(同一函数名称只能定义一次)。

#函数名称
正确:同一程序内函数定义使用不同函数名称
int fun1(){}
double fun2(){}

错误:同一程序内函数定义的函数名称不能相同
int fun(){}
double fun(){}

参数:参数是可选的,也就是说,函数可能不包含参数,即括号()内为空。参数由参数类型和参数名组成,多个参数之间使用英文逗号“,”分隔。

#参数
int fun1(){}   //无参数
int fun2(int munber){}   //一个整数类型参数
int fun3(int munber1,int munber2){}//两个整数类型参数
...

函数主体:函数内的代码

2
函数的调用

在完成函数定义后便可以调用该函数

1、无返回无参数函数的调用

      函数名称();      

      如:

#include<stdio.h>
void hw()
{
    printf("Hello World!\n"); 
}

int main()
{
    hw();
    return 0;
}

2、有返回含参数函数的调用

      变量名=函数名称(参数);

      如:

#include<stdio.h>
int sum(int munber1,int munber2)
{
    return munber1+munber2;
}

int main()
{
    int a=0;
    a=sum(1,2);
    printf("%d\n",a);//a=3
    return 0;
}

也可直接 函数名称(参数);则此时输出0

3、无返回含参数函数的调用

     函数名称(参数);

     如:

#include<stdio.h>
void prin(int munber)
{
    printf("%d\n",munber);
}

int main()
{
    prin(1);
    return 0;
}

4、有返回无参数函数的调用

     变量名=函数名称();

     如:

#include<stdio.h>
int retu()
{
    return 1;
}

int main()
{
    int a=0;
    a=retu();
    printf("%d\n",a);//a=1
    return 0;
}

也可直接 函数名称(参数);则此时输出0,如:

#include<stdio.h>
int retu()
{
    return 1;
}

int main()
{
    int a=0;
    retu();
    printf("%d\n",a);//a=0
    return 0;
}

即调用函数时,通过函数名称识别要调用的函数,是否需要传入参数由函数定义中是否存在参数决定;调用有返回值的函数时可选择是否接受返回值,若接受返回值则用于接受的变量类型需与返回值类型相同。

3
函数的声明

在上面函数调用中,不难发现被调用的函数都在主函数的前面,而我们知道主函数才是程序的入口,所以通常主函数作为第一个函数,即

#include<stdio.h>
int main()
{
    hw();
    return 0;
}

void hw()
{
    printf("Hello World!\n");
}

而这样写往往是不能通过编译的,错误如下:

C语言之函数详解(一)

显然编译器认为函数hw()是未定义的,这时便需要函数声明通知编译器该函数是存在的,让编译器从整个程序中找到函数hw()的定义。

C语言中的函数声明的一般形式如下:

返回类型 函数名称(参数);
void hw();
函数声明与函数定义:
1、函数声明与声明的函数的返回类型、函数名称、参数一致
2、函数声明与函数定义区别为函数声明没有函数主体
3、函数声明只是说明语句,必须以分号结束

加入函数声明,该程序便能正常执行

#include<stdio.h>
void hw();  //声明函数hw()
int main()
{
    hw();   //调用函数hw()
    return 0;
}

void hw()  //定义函数hw()
{
    printf("Hello World!\n");
}


C语言之函数详解(一)

C语言之函数详解(一)
C语言之函数详解(一)
长按二维码关注我们
有趣的灵魂在等你
C语言之函数详解(一)