007-函数-C语言笔记

学习目标

1.【了解】函数的分类

2.【掌握】函数的声明定义和调用

3.【掌握】函数的形参和实参

4.【掌握】带返回值的函数

5.【掌握】全局变量和局部变量

6.【了解】注释插件的安装和使用

一、函数的分类

C程序是由一个一个的函数组成的,我们每天使用的main函数也是函数。其实函数在其他编程语言里也叫方法,java,c++,以及我们后面马上要开始学习的objective-c中,函数都叫他方法。

函数可以分为三大类:

1.主函数,每个程序中有且只能有一个、也必须有一个主函数。无论主函数写在什么位置,C程序总是从主函数开始执行的,并且只执行main函数,其他函数都是需要在main函数中调用的。

2.程序员自定义函数,就是由我们自己写的函数,可以写任意个,不限制。

3.C语言提供的库函数,比如printf,scanf函数等等。

二、函数的声明定义和调用

函数的作用:

1.实现代码的复用,将1段代码放在函数之中,什么时候想要执行这段代码,我们只需要调用这个函数就可以了,减少代码的冗余。

2.修改和维护十分的方便,只要修改函数体的代码,所有在调用函数的地方都会跟着一起改。

3.屏蔽代码的实现,对于函数的调用者而言,不需要关心函数的内部是如何实现的.,只需要关心函数实现什么功能。

声明语法:

 
1
返回值类型函数名称([参数列表]);

定义语法:

 
1
2
3
4
返回值类型函数名称([参数列表]){
    那段需要被重用的代码;
    函数体;
}

调用语法:

 
1
函数名称([参数列表]);//如果没有返回值

例如:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
//定义一个打印99乘法表的函数
voidshow99Biao(){
    for(inti=1;i<=9;i++){
        for(intj=1;j<=i;j++){
            printf("%d * %d = %d\t",j,i,i*j);
        }
        printf("\n");
    }
}
 
intmain(intargc,constchar*argv[]){
    //调用函数
    show99Biao();
    return0;
}

函数名也就是函数的标识符,和我们变量一样,要遵守标识符命名规范。一般我们为函数命名都是以小字母开头,如果多个单词就第一个单词首字母小写,后面的每个单词首字母大写。

三、函数的形参和实参

函数的参数:

声明在定义函数的小括弧之中的变量,就叫做函数的参数,我们可以理解为参数是在函数里定义的一个局部变量,所以我们不能在函数之中再声明1个和参数名相同的局部变量,是会冲突的。

参数如何使用:

因为参数也就是函数里定义的一个局部变量,所以我们可以在函数体内使用参数。当我们调用1个函数的时候,如果这个这个函数带了参数,这个时候要求在调用这个函数的时候要为这个函数的参数赋值。

形式参数:定义在函数的小括弧之中的参数,我们叫做形式参数, 简称形参。

实际参数:在调用函数的时候,实际上为形参赋的值,就叫做实际参数,简称实参。

在调用带参数的函数的时候,要求调用的时候必须要为形参赋值,并且实参的类型最好是要和形参的类型一致,如果不一致,会做类型转换。

例如:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
voidpanDuanOuShu(intnum){//带单个参数的函数
    if(num%2==0){
        printf("是偶数\n");
    }else{
        printf("不是偶数\n");
    }
}
 
voidgetSum(intnum1,intnum2){//带多个参数的函数
    intsum=num1+num2;
    printf("sum = %d\n",sum);
}
 
intmain(intargc,constchar*argv[]){
    
    panDuanRunNian(1998);//调用panDuanOuShu函数,打印出:是偶数
    getSum(10,100);//调用getSum函数,打印出:sum = 110
    return0;
}

函数的参数有啥用?

调用者可以将自己的数据,通过参数传递到函数的内部去。记住这句话就行了。。。

四、带返回值的函数

return关键字

return关键字可以用在函数之中,如果在函数之中遇到了return关键字,就会立即结束这个函数的执行,如果return后面还有函数体代码是不会被执行的了,而是立即结束这个函数。

break、continue、return的区别

break用在switch-case之中,代表立即结束switch-case结构。用在循环体之中,代表立即结束当前循环结构。

continue只能使用在循环体之中,代表立即结束本次循环。

return用在函数体之中,代表结束函数。

什么时候函数需要返回值?

当函数执行完毕之后,有1个结果(数据),函数内部不确定如何处理这个数据。 并且这个数据调用者需要的,调用者自己想要按照自己的方式来处理这个结果。那么这个时候,函数就应该将这个数据返回给调用者,由调用者自己来决定如何处理这个数据。

函数如何将数据返回给调用者呢?

1). 先确定函数内部要返回给调用者的数据的类型。

2). 修改函数的返回值类型为要返回的数据的类型。

3). 在函数结束之前,使用return关键字将数据返回。

调用者如何拿到函数返回来的数据呢?

定义1个和函数的返回值类型相同的变量接收就可以。

例如:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
intisRunNian(intyear){
    if(year%400==0||(year%4==0&&year%100!=0)){
        return1;
    }
    return0;
}
 
intmain(intargc,constchar*argv[]){
    //用户接收返回的数据并进行处理
    if(isRunNian(2016)!=0){
        printf("哈哈.终于可以过生日了.");
    }else{
        printf("哎....");
    }
    
    return0;
}

五、全局变量和局部变量

局部变量

凡是定义在函数内部的变量,都叫做局部变量。我们之前学习到的变量都是定义在函数的内部的,所以我们之前学习到的变量都是局部变量。

全局变量

变量也可以直接定义在.c源文件之中,也就是定义在函数的外部,这样的变量我们叫做全局变量。

全局变量和局部变量的异同

相同点:都是变量,都会在内存中申请空间,用来存储数据。

作用域不同

局部变量可以在函数的内部从定义这个局部变量开始,到这个作用域结束的这段期间都可以访问。定义在1个函数中的变量,在另外1个函数绝对是不能访问,因为它属于不同的作用域。

全局变量从定义全局变量出开始,后面的所有的函数都可以访问这个全局变量,定义在全局变量前面的函数是无法访问这个全局变量的。但是一般情况下,我们全局变量的声明都是放在所有的函数的前面的。

默认值不同

我们声明1个局部变量,如果没有为这个局部变量赋值,那么这个局部变量中的值是垃圾值。

如果我们声明1个全局变量,没有为这个全局变量赋值,那么这个全局变量的默认值为被自动初始化为0。

回收时间不同

局部变量:当定义局部变量的大括弧被执行完毕之后,这个局部变量就会被系统立即回收。

全局变量:知道程序结束的时候,才会回收全局变量。

例如:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
intquanJv=100;
 
voidtest1(){
    quanJv++;
}
 
intmain(intargc,constchar*argv[]){
    printf("quanJV = %d\n",quanJv);//打印quanJV = 101
    intquanJv=200;
    printf("quanJV = %d\n",quanJv);//打印quanJV = 200
    return0;
}

007-函数-C语言笔记的更多相关文章

  1. R语言函数化学习笔记6

    R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...

  2. R语言函数化学习笔记3

    R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...

  3. R语言函数化编程笔记2

    R语言函数化编程笔记2 我学过很多的编程语言,可以我写的代码很啰嗦,一定是我太懒了.或许是基础不牢地动山摇 1.为什么要学函数 函数可以简化编程语言,减少重复代码或者说面向对象的作用 2.函数 2.1 ...

  4. R语言函数化编程笔记1

    R语言函数化编程笔记1 notes:有一个不错的网站叫做stack overflow,有问题可以从上面找或者搜索答案,会有大佬相助. 在github上面可以找到很多R的扩展包,如果自己额修改被接受,那 ...

  5. 003-scanf函数使用和表达式-C语言笔记

    003-scanf函数使用和表达式-C语言笔记 学习目标 1.[掌握]输入函数scanf的基本使用方法 2.[掌握]输入函数scanf运行原理和缓冲区理解 3.[掌握]算术运算符和算术表达式的使用 4 ...

  6. go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!

    内置函数 Go 语言拥有一些不需要进行导入操作就可以使用的内置函数.它们有时可以针对不同的类型进行操作,例如:len.cap 和 append,或必须用于系统级的操作,例如:panic.因此,它们需要 ...

  7. R语言笔记

    R语言笔记 学习R语言对我来说有好几个地方需要注意的,我觉得这样的经验也适用于学习其他的新的语言. 语言的目标 我理解语言的目标就是这个语言是用来做什么的,为什么样的任务服务的,也就是设计这个语言的动 ...

  8. R语言笔记4--可视化

    接R语言笔记3--实例1 R语言中的可视化函数分为两大类,探索性可视化(陌生数据集,不了解,需要探索里面的信息:偏重于快速,方便的工具)和解释性可视化(完全了解数据集,里面的故事需要讲解别人:偏重全面 ...

  9. Scala语言笔记 - 第一篇

    目录 Scala语言笔记 - 第一篇 1 基本类型和循环的使用 2 String相关 3 模式匹配相关 4 class相关 5 函数调用相关 Scala语言笔记 - 第一篇 ​ 最近研究了下scala ...

  10. Go 语言笔记

    Go 语言笔记 基本概念 综述 Go 语言将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡. 设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 ch ...

随机推荐

  1. A Systems-Level Characterization of the Differentiation of Human Embryonic Stem Cells into Mesenchymal Stem Cells (解读人:王欣然)

    文献名:A Systems-Level Characterization of the Differentiation of Human Embryonic Stem Cells into Mesen ...

  2. postgre安装和使用(R&Python)

    安装postgre http://helianthus-code.lofter.com/post/1dfe03e0_1c68233aa 这里选C更好 这里口令密码输入就是黑的 我装的时候反复报错,查了 ...

  3. SuperMap许可常见问题及解决办法

    一.试用许可申请可以直接在北京超图软件股份有限公司官网的“SuperMap 技术资源中心”申请试用许可,申请后您将获得:1.如果申请的是 SuperMap GIS 7C 系列产品的许可,您将获得 一个 ...

  4. JSP学习笔记(二)

    JSP内置对象 request对象 response对象 session对象 application对象 out对象 有些对象不用声明就可以在JSP页面的Java程序片和表达式部分使用,这就是JSP的 ...

  5. 2020.4.4号全国疫情哀悼日网页变灰色前端是如何实现的?-pink老师

    今天是4.4疫情哀悼日,纪念疫情期间牺牲的烈士和逝世同胞,因此大部分网站颜色都变灰色了,我们前端是如何实现的呢? 核心原理,使用css3的滤镜效果即可,filter grayscale 将整个界面变为 ...

  6. -bash: syntax error near unexpected token `newline'问题解决

    原因:bash语法错误,例如, 仔细查看发现语句中不能有'<'和'>',删除这两个符号即可: 问题解决!

  7. Python实现压缩解压缩,移动复制copy文件

    import shutil import os from shutil import make_archive # 查看可压缩的文件类型 print(shutil.get_archive_format ...

  8. WiX 简介

    最近研究了一下WIX打包,简单总结一下,方便自己以后查阅,也希望能给需要的人一些提示和帮助. WiX 简介 Windows Installer XML (WiX ) 平台是一组工具与规范,使您能够创建 ...

  9. canvas 实现手机图案解锁

    参考☞: https://www.cnblogs.com/chenyingying0/ 先上效果图: 我是在 vue 里面实现js 文件 ,所以如果需要在vue 里面使用 可以将以下内容import  ...

  10. (3)SQL Server表分区

    1.简介 当一个表数据量很大时候,很自然我们就会想到将表拆分成很多小表,在执行查询时候就到各个小表去查,最后汇总数据集返回给调用者加快查询速度.比如电商平台订单表,库存表,由于长年累月读写较多,积累数 ...