c语言笔记(7.1.1函数~7.2.4)

7.1.1初见函数

求和:求出1到10到30和35到45的三个和

#include<stdio.h>
int main()
{
    int i;
    int sum;

    for(i=1,sum=0;i<=10;i++){
      sum+=i;
}
    printf("%d到%d的和是%d",1,10,sum);

    for(i=20,sum=0;i<=30;i++){
       sum+=i;
}
    printf("%d到%d的和是%d\n",20,30,sum);

    for(i=35,sum=0;i<=45;i++){
        sum+=i;
}
    printf("%d到%d的和是%d\n",35,45,sum);

    return 0;
}

“代码复制”是程序质量不良的表现。三段代码几乎一模一样。 

#include<stdio.h>
 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);
}

int main()
{
   sum(1,10);
   sum(20,30);
   sum(35,45);

   return 0;
}

7.1.2函数的定义和使用

什么是函数:函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值。

可以先想象成数学中的函数:y=f(x)

函数定义

​
#include<stdio.h>                          
 void sum(int begin,int end) //返回类型void//函数名sum//参数表(...)       //函数头
{ 
      int i;
      int sum=0;
      for(i=begin;i<=end;i++){
         sum+=i                             //函数体
    }
    printf("%d到%d的和是%d\n",begin,end,sum);
}
​

调用函数(参数值):

1.()起到了表示函数调用的重要作用

2.即使没有参数也需要()

3.如果有参数,则需要给出正确的数量和顺序

4.这些值会被按顺序依次用来初始化函数中的参数

7.1.3 从函数中返回

return停止函数的执行,并送回一个值

return;

return表达式;

一个函数里有多个return语句。

7.2.1函数原型

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)
}

int main()
{
    sum(1,10);
    sum(20,30);
    sum(35,45);

    return 0;
}

像这样把sum()写在上面,是因为:

c的编译自上而下顺序分析你的代码

在看到sum(1,10)时,他需要知道sum()的样子,所以sum()在前面

也就是sum()要几个参数,每个参数类型的如何,返回什么类型

这样它才能检查你对sum()的调用是否正确

如果没有,需要提前声明,每次运行计算机要判断声明是否和定义一样

#include <stdio.h>​ 
void sum(int begin,int end)//声明

int main()
{
    sum(1,10);
    sum(20,30);
    sum(35,45);

    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\n",begin,end)
}
​

函数原型

函数头,以分号";"结尾,就构成了函数的原型

函数原型的目的是告诉编译器这个函数长什么样子

名称

参数(数量及类型)

返回类型

7.2.2参数传递

调用函数

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

可以传递给函数的值是表达式的结果,这包括:

字面量,变量,函数的返回值,计算的结果

类型不匹配会怎样?

调用函数时给的值与参数的类型不匹配是c语言传统上最大的漏洞

编译器总是悄悄替你把类型转换好,但是这很可能不是你所期望的

后续的语言,c++/Java在这方面很严格

c语言在调用函数的时候,永远只能传值给函数

传值

每个函数有自己的变量空间,参数也位于这个独立的空间,和其他函数没有关系

过去,对于函数参数表中的参数,叫做”形式参数“,调用函数时给到值叫做”实际参数“。

容易误会不建议这么称呼他们,我们认为他们是参数和值的关系。

7.2.3本地变量

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

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

参数也是本地变量

变量的生存期和作用域

生存期:什么时候这个变量开始出现了,到什么时候他灭亡了

作用域:在(代码的)什么范围内可以访问这个变量(这个变量可以起作用)

对于本地变量,这两个问题的答案是统一的:大括号内-----块

本地变量的规则

1.本地变量在块内

2.它可以是定义在函数的块内

3.也可以定义在语句的块内

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

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

6.在块外面定义的变量在里面仍然有效,里面到外面就不存在了

7.块里面定义了和外面同名的变量则掩盖了外面的(在块里面不能定义和外面相同的变量)

8.本地变量不会被默认初始化

9.参数在进入函数的时候被初始化了

7.2.4函数庶事

逗号运算符?

调用函数时的逗号和逗号运算符怎么区分?

调用函数时的圆括号里的逗号是标点符号,不是运算符号

f(a,b)标点符号           f((a,b))运算符

c语言不允许函数嵌套定义

关于main

int main()也是参数

要不要写成int main(void)?

return 的0有人看么?有人看有作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值