C语言查漏之函数

  • 函数定义

void sum(int begin, int end)
{
    int i;
    int sum = 0;
    for(i=begin; i<=end; i++){
        sum += i;
}
    printf("%d到%d的和是%d\n", begin, end, sum);
}

上面的代码中,第一行是函数头,void是返回类型,sum是函数名,int begin, int end是参数表,大括号内的内容是函数体。

  • 函数调用

形式:函数名(参数值);

注:括号()起到了表示函数调用的重要作用,即使没有参数也要有括号,有参数则需要给出正确的数量和顺序,

  • 函数返回

return停止函数的执行,并送回一个值,格式为:

return;或  return 表达式

一个函数里可以出现多个return语句。

从函数中返回值,可以赋值给变量,可以再传递给函数,甚至可以丢弃,有的时候要的是副作用。

  • 没有返回值的函数

void 函数名(参数表)

是不能使用带值的return的,可以没有return, 调用的时候不能做返回值的赋值。

如果函数有返回值,则必须使用带值的return。

  • 函数原型

函数是有先后关系的,如果把main函数放到自己定义的函数前面,当编译器看到函数调用的时候,旧标准会假设所调用的函数所有的参数都是int,返回值也是int,如果恰好不对的话就会报错。

这时候函数原型就起作用了,形式为:

double max(double a, double b);

函数头,以分号结尾构成,就是为了让编译器知道这个函数长什么样子,包括名称,参数(数量和类型),返回类型。现在一般把函数原型写在调用它的函数前面,原型里可以不写参数的名字,但是一般要写上。

  • 参数传递

如果函数有参数,调用函数时必须传递给它数量、类型正确的值。

可以传递给函数的值是表达式的结果,包括变量,函数的返回值和计算的结果等。如:

int a, b, c;
a = 5;
b = 6;
c = max(10, 12);
c = max(a, b);
c = max(c, 23);
c = max(max(23, 45), a);
c = max(23+45, b);
  • 类型的匹配问题

调用函数时给的值与参数的类型不匹配的话C语言的编译器会悄悄的替你把类型转换好,C++和Java在这方面比较严格。

  • 值传递

C语言在调用函数时只能传值给函数。

每个函数都有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系,关于形参和实参,因为比较容易搞混,所以我们一致把它们称作参数值。

  • 本地变量

函数每次运行,就产生了一个独立的变量空间,在这个空间中的变量,是函数的这次运行所独有的,称作本地变量。

即:定义在函数内部的变量就是本地变量。

参数也是本地变量。

  • 变量的生存期和作用域

生存期:什么时候这个变量开始,到什么时候消失。

作用域:代码的什么地方这个变量可以起作用。

对于本地变量来说,这两者是一致的,都是在函数的大括号内。

  • 本地变量的规则

本地变量是定义在块内的,它可以是定义在函数的块内,

也可以是定义在语句的块内,

甚至可以随便拉一对大括号来定义变量,

程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了。

块外面定义的变量在里面仍然有效,块里面定义了和外面同名的变量则掩盖了外面的。

不能在一个块内定义同名的变量,

本地变量不会被默认初始化,参数是在进入函数的时候被初始化了。

  • 需要注意的细节

f(a, b)和f((a, b))

后者是一个参数,因为括号内的是一个逗号运算符。

C语言不允许函数的嵌套定义。但是可以写函数的声明。

int i, j, sum(int a, int b);这种写法在C语言中是允许的,但是一般不建议。

return (i);也是可以这样写的。但不建议。

如果函数没有参数的话写成void  max(void);     但是如果写成void max();一般表示函数的参数表未知,并不表示没有参数。

关于main函数其实可以写成main(void),return的0也是有人看的,在不同的操作系统中通过不同的代码就可以看到返回的结果。

来源自MOOC

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值