什么是函数
函数是一块代码,接收零个或多个参数做一件事,并返回零个或一个值
函数定义
void sum(int begin, int end)
{
int i;
int sum = 0;
for(i = begin; i<=end;i++){
sum += i;
}
printf("%d到%d的和是%d",begin,end,sum);
}
int main()
{
sum(1.10);
return 0;
}void:返回类型 函数头
sum:函数名
begin end :参数表
{ ... } :函数体
调用函数
函数名(参数值);
() 起到了表示函数调用的重要作用
即使没有参数也需要()
如果有参数,则需要给出正确的数量和顺序
这些值会被安装顺序依次用来初始化函数中的参数
从函数中返回值
return 停止函数的执行,并送出一个值
return;
return 表达式;
函数先后关系
把自己所写的函数放最上面,然后才开始写 main 主函数参考上面的代码段
C的编译器自上而下的顺序分析你的代码,
在看到 sum 函数的时候,需要知道 sum函数的参数值,每个参数的类型是什么。要返回什么类型
函数原型
如果把函数放在主函数下面可能会引发警告,需要在加上一条声明来告诉编译器说这段函数存在于下方的代码中(可能有的编译器不会报错,跟编译器执行严格有关)然后代码会在下面将定义的函数和声明的函数进行对比如果一致就会输出执行函数,如果不一样就会不匹配警告
void sum(int begin,int end); // 声明
int main()
{
sum(1.10);
return 0;
}
void sum(int begin, int end) // 定义
{
int i;
int sum = 0;
for(i = begin; i<=end;i++){
sum += i;
}
printf("%d到%d的和是%d",begin,end,sum);
}函数头,以分号 ; 结尾,就构成了函数的原型
函数原型的目的是告诉编译器这个函数长什么样子
名称
参数(数量及类型)
返回类型
旧标准习惯会把函数原型写在调用它的函数里面
现在默认写在调用它的函数前面
如果函数是 double 类型,两个参数是 int 类型,就会发生类型转换可以看下自动类型转换文章 https://www-halo.xhyiyon.cn/archives/zi-dong-lei-xing-zhuan-huan
调用函数
如果函数有参数,调用函数时必须传递给它数量、类型正确的值
可以传递给函数的值是表达式的结果
字面量
变量
函数的返回值
计算的结果
类型不匹配
调用函数时给的值与参数的类型不匹配是C语言传统上最大的漏洞
编译器总是悄悄替你把类型转换好,但是这很可能不是你所期望的
后续的语言,C++Java在这方面很严格
传值
每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系
过去,对于函数参数表中的参数,叫做“形式参数”,调用函数时给的值,叫做“实际参数'