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程序中主函数是必不可少的,但除主函数还可以有其他函数(包括头文件内的函数、自定义的函数)。由于主函数是程序的入口和出口,所以只有在主函数内被调用的其他函数才能在程序中发挥作用。
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语句,且返回的数据为1是int类型,所以该函数的返回类型为int
函数fun2也存在return语句,但返回的数据为0.1是double类型,所以该函数的返回类型为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){}//两个整数类型参数
...
函数主体:函数内的代码
在完成函数定义后便可以调用该函数
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;
}
即调用函数时,通过函数名称识别要调用的函数,是否需要传入参数由函数定义中是否存在参数决定;调用有返回值的函数时可选择是否接受返回值,若接受返回值则用于接受的变量类型需与返回值类型相同。
在上面函数调用中,不难发现被调用的函数都在主函数的前面,而我们知道主函数才是程序的入口,所以通常主函数作为第一个函数,即
#include<stdio.h>
int main()
{
hw();
return 0;
}
void hw()
{
printf("Hello World!\n");
}
而这样写往往是不能通过编译的,错误如下:
显然编译器认为函数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");
}