登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 第八章:函数与模块化程序设计

[复制链接]
发表于 2017-1-20 11:39:48 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C语言
学习安排: 详见:http://bbs.hpuedd.com/forum.php?mod=viewthread&tid=837&fromuid=385
开始时间: 2017-01-17
结束时间: 2017-01-18
本帖最后由 夜色星空 于 2017-1-20 01:57 编辑
在c语言中,为了体现某段程序的可复用性与将较大的程序进行分割便于实现

函数便发挥了其优越的作用

它可以将一系列语句进行封装

封装完以后的一个整体,我们称之为函数

一系列函数的集合,我们称之为库

C语言编译器标准库中的<stdio.h>

提供了诸如

printf();

scanf();

等函数,我们不需要这些函数是如何编写的

但我们知道如何去使用

这样,大大节省了时间成本

但光有这些标准库函数还满足不了我们的需求

所以,我们就学习如何去制作一个函数

用标准库函数去搭建自己的函数

它的可复用性体现在

就像你可以多次调用printf()那样,多次调用你自己的函数

如果某段程序需要反复使用,不妨将其封装成一个函数,以节省时间与空间成本

那么这里就有了一个问题

随着变量中的值不一样,一段程序运行结果也必定不一样(除非这段代码不使用变量,但大多都使用了)

那么我们有没有一种方法解决这个问题?

有,传参

就相当于给数学当中的F(x)中的x进行赋值

只不过形式有些区别

如:

1-1.PNG

先看main()(因为它是程序运行的起始)

声明了一个整形a,初始化为0(初始化:声明时赋值)

将a的值给fun()中的x(此时,称a为实参,x为形参,a=x称为传参)

原因:a的值为实际的值,而x只规定了fun函数需要一个int类型的参数所以叫形参

把a中的值赋给x叫做传参,传递参数

那么此时在fun函数中x就相当于main函数中的a了

经过fun()的运行加工已经得出了我们想要的值

然而,如何将fun()中正确的值传给main()

这时,我们用到了return(返回)

return x;

也就是将x的值返回调用函数的地方

也就是main()中

那么此时

a=fun(a);

就相当于

a=x;(return x;中x的值)

(PS:可以声明多个形参,进行传参,但返回值一般只有一个)

问:为什么不能直接修改a的值而必须经过传参,先修改x,再传给a?

答:因为使用函数有以下几种限制

1.当调用函数时,机器会开辟一个内存空间供给调用,当调用结束时释放空间(static声明除外)

2.在函数中声明的变量,其作用域仅限于本函数(除非使用关键字扩展作用域)

3.函数只能嵌套调用,不能嵌套定义

4.函数应先声明,后调用

先说第一点:

制作一个函数,就像制作一个模板的图纸,当你使用这个模板时(函数调用),机器才会将模板做出来(构建函数)(貌似是为了减少内存占用,减少空间成本)

当使用完毕,机器将模板毁掉(内存释放)

第二点:

通俗地说,就是你在哪对花括号内声明的变量,就只能在那对花括号内部使用

如:

1-2.PNG

这个运行不了,会报错

然而

如:

1-3.PNG

这种,就不会报错

因为a的作用范围为main()

而printf()函数在其作用范围内

还有一种声明

如:

1-4.PNG

此为全局声明,所有函数都可以进行使用更改

第三点:
嵌套声明,就是在某函数定义域内(花括号内)再声明一个函数,这是不被允许的

嵌套调用,就是在某函数定义域内调用其它函数(main函数无法被其它函数调用,否则就在逻辑上形成了死循环)

第四点:

如果足够细心的话,就会发现,我的第一张图片中,将fun()写在了main()前面

这就是函数的先声明,后调用

将索要调用的函数蓝图先画好,然后调用时机器才能做模子

为了使结构更清晰

有时也使用如下方法

1-5.PNG

先将函数头写在调用函数前(分号!分号!分号!)

然后在其下方写函数体

(也可以说是先将蓝图名告诉机器,调用时让机器自行寻找对应蓝图)

这样就可以解释问什么添加头文件要在最上方了

近期还遇到了一种在函数内进行函数声明的例子


查了一下,确实可以(貌似是谭浩强的书?可惜手里没有)


但个人认为非常影响程序整体框架,增加代码长度(每一个使用此函数的都必须先声明),不推荐


小结:

调用函数输出字符'a'-'z'

(参考程序见附件)




小型ASCII程序.txt

316 Bytes, 下载次数: 414

小结例题,加强版

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表