一、初见函数

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

#include <stdio.h>

// 定义一个函数
void sum(int begin, int end)
{
int sum = 0;
int i = 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;
}

二、函数的定义和使用

  1. 函数是一块代码,接收零个或者多个参数,做一件事,并返回另个或者一个值
  2. 其他的和java差不多,这里就不详细记录了

从函数中返回值

// 定义返回值的类型
int max(int a , int b)
{
int ret;
if (a > b){
ret = a;
}else{
ret = b;
}
// 这个就是返回值
return ret;
} int main()
{
// 接收返回的值
int x = max(3,6);
printf("%d\n", x); return 0;
}

三、函数的先后关系

像上面把max函数写在上面是因为:

  1. c的编译器自上而下的顺序分析你的代码
  2. 在看到max函数的时候,他要知道max函数的样子
  3. 也就是max函数需要几个参数,每个参数如何,返回什么类型
  4. 如果main函数写在上面的话,需要把自己定义的函数先进行声明,但是现在大部分编译器也可以不用声明了
// 进行声明
int max(int a , int b); int main()
{
int x = max(3,6);
printf("%d\n", x);
return 0;
} // 定义返回值的类型
int max(int a , int b)
{
int ret;
if (a > b){
ret = a;
}else{
ret = b;
}
// 这个就是返回值
return ret;
}

参数传递

类型不匹配?

  1. 调用函数时给的值与参数的类型不匹配是C语言传统上最大的漏洞
  2. 编译器总是把你类型转换好,但这可能不是你所期望的
  3. 后面的语言,c++/java在这方面很严格
void cheer(int i)
{
printf("cheer %d\n", i);
} int main()
{
double f = 8.4;
cheer(f); // 8
cheer(2.0); // 2 return 0;
}

四、传值

  1. 每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系
  2. 过去,对于函数参数表中的参数,称“形式参数”,调用是给的参数叫“实际参数”

五、本地变量(局部变量)

  1. 函数的每次运行,就产生一个独立的变量空间,在这个空间中的变量,就是函数的这次运行多独有的,称之为本地变量
  2. 定义在函数内部的变量就是本地变量
  3. 参数也是本地变量

变量的生存期和作用域

  1. 生存期:什么时候这个变量开始出现了,什么时候消亡了
  2. 作用域:在代码的什么范围内可以访问这个变量
  3. 对于本地变量:前面两个问题的答案都是 --- 在大括号内

本地变量的规则

  1. 本地变量都是定义在块(大括号)内的

    • 他可以是定义在函数的块内
    • 也可以定义在语句的块内
  2. 程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了
  3. 块外面定义的变量在里面仍然有效
  4. 块里面定义了和外面同名的变量则覆盖了外面的
  5. 不能在一个块内定义同名的变量
  6. 本地变量不会被默认初始化
  7. 参数在进入函数的时候会初始化

C语言入门-函数的更多相关文章

  1. Go语言入门——函数

    写了快一个月的Go,已经没有什么陌生感了. 一行代码写完,不会在行尾本能的敲上“:”,直接Enter键换行: 定义变量把变量名放在前面,类型放在后面: 使用struct去定义自己想要的数据模型就好比定 ...

  2. C语言入门(7)——自定义函数

    C源程序是由函数组成的.虽然在C语言入门系列前面几篇的程序中大都只有一个主函数main(),但实用程序往往由多个函数组成.函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能.C语言中的函数相 ...

  3. Go语言入门教程(十)之函数

    Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...

  4. Go语言入门系列(六)之再探函数

    Go语言入门系列前面的文章: Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 Go语言入门系列(五)之指针和结构体的使用 在Go语言入门系列(二)之基础语法总结这篇文章中已经 ...

  5. 【C语言入门教程】5.2 函数的作用域规则(auto, static)

    作用域规则是指代码或数据的有效使用范围.C语言将函数作为独立的代码块,函数之间不能相互访问其内部的代码或数据.函数间数据的传递只能通过接口实现.但是,变量的定义方法可改变函数的作用域规则,可将变量分为 ...

  6. 【C语言入门教程】5.6 函数库和文件

    函数库是为代码复用建立的,将同一类型,需要在不同的程序里使用的函数放置在一起,就组成了一个函数库.如 C 语言的标准库,它集合了开发者常用的函数.开发者自行编写的函数也可以组成函数库,通常称之为自定义 ...

  7. C语言的本质(15)——C语言的函数接口入门

    C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...

  8. 《C语言入门1.2.3—一个老鸟的C语言学习心得》—清华大学出版社炮制的又一本劣书及伪书

    <C语言入门1.2.3—一个老鸟的C语言学习心得>—清华大学出版社炮制的又一本劣书及伪书 [薛非评] 区区15页,有80多个错误. 最严重的有: 通篇完全是C++代码,根本不是C语言代码. ...

  9. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

随机推荐

  1. Egret白鹭开发微信小游戏分享功能

    今天给大家分享一下微信分享转发功能,话不多说,直接干 方法一: 1.在egret中打开Platfrom.ts文件,添加代码如下(当然,你也可以直接复制粘贴) /** * 平台数据接口. * 由于每款游 ...

  2. Vue 应用 nginx 配置 前后端不分离模式

    一.先在官网下载nginx 软件,解压后放在软件盘中如D盘 将nginx 文件夹拖到编译器中,打开conf 文件夹中的 nginx.conf 文件,找到其中的server {} 配置项,默认35 行. ...

  3. java设计模式3.建造者模式、原型模式

    建造者模式 一个产品常有不同的组成部分作为产品的零件,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用,有些时候,一个对象的一些性质必须按照某个顺序赋值才 ...

  4. IT项目管理入门知识

  5. hdu-6701 Make Rounddog Happy

    题目链接 Make Rounddog Happy Problem Description Rounddog always has an array a1,a2,⋯,an in his right po ...

  6. 牛客2018国庆集训派对Day3 I Metropolis 多源最短路径

    传送门:https://www.nowcoder.com/acm/contest/203/I 题意: 求每个大都会到最近的一个大都会的距离. 思路: 把每个大都会设为起点,跑一遍最短路.在跑最短路的时 ...

  7. POJ-3169 Layout (差分约束+SPFA)

    POJ-3169 Layout:http://poj.org/problem?id=3169 参考:https://blog.csdn.net/islittlehappy/article/detail ...

  8. HDU- 6437.Videos 最“大”费用流 -化区间为点

    参考和完全学习:http://www.cnblogs.com/xcantaloupe/p/9519617.html HDU-6437 题意: 有m场电影,电影分为两种,看一场电影可以得到对应的快乐值. ...

  9. centos 6.5 系统故障分析实验

    系统故障分析实验 日志文件分析 日志的功能 用于记录系统.程序运行中发生的各种事件 通过阅读日志,有助于诊断和解决系统故障 日志文件的分类 内核及系统日志 由系统服务syslog统一进行管理,日志格式 ...

  10. 【Offer】[7] 【重建二叉树】

    题目描述 思路分析 Java代码 代码链接 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4, ...