第8章 善于利用指针(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内存管理指针的基本概念指针应用实例指针作函数参数第8章指针(1)
复习回顾
上次课的内容:
◆局部变量和全局变量
◆变量的作用域
◆变量的生存期
◆声明与定义
◆内部函数
◆外部函数◆你开始习惯写函数了吗?
2012是如何实现的?假定造成世界末日的上帝是一个程序员,作为一名合格的程序员,他绝不应该写出类似于“摧毁地球”这样的程序,而应该写一个“摧毁(行星)”的函数,然后把地球作为参数传进去!
C语言新手的晋级之路
第一步:萧规曹随
◆在这一步要求按照教材或讲义上的程序实例进行原样
输入,运行一下程序看是否正确。
◆在这一步,掌握C语言编程软件的使用方法(包括新
建、打开、熟练输入、编辑、保存、关闭C程序);
初步记忆新学章节的知识点;养成良好的编程风格(
是讲义提倡的而不是教材上的)
◆难点:小心数字1和字母l,字母o和数字0,中英文标
点符号的区别
C语言新手的晋级之路
第二步:移花接木
◆在第一步输入的C程序的基础上进行试验性的修改,
运行一下程序看一看结果发生了什么变化,分析结果变化的原因,加深新学知识点的理解。
◆可与第一步同步进行,“输入”可加深记忆,“修改
”可加深理解,二者相辅相成,互相促进。
◆友提,一次进行一处修改即可,免得把自己改晕了。
C语言新手的晋级之路
第三步:无中生有
◆面对教材的例子题目,不参考教材,自己从头开始编
写程序。看能否写出正确运行的代码。
◆初学者易犯的错误:scanf格式控制和输入不匹配或把变量
名当地址作参数,使用未定义的变量、漏掉或多写“;”、“{”
与“}”、“(”与“)”不匹配,控制语句(选择、分支、循环)的格式不正确,调用库函数没有包含相应头文件,调用未声明
的函数、调用函数时实参和形参不匹配、数组边界越界等等
◆要学会看编程工具的错误信息提示:双击错误提示光标可
跳转到发生错误的行,如果该行没有错误就往前查找。错误要一
个一个修改,每改完一次编译一下程序。
C语言新手的晋级之路
第四步:欲擒故纵
◆教材最后一章列出C语言初学者易犯的错误,可以按
照易出错的类型,将教材中正确的程序改成错误的程序,运行一下看看出现的错误信息提示,并记下。再将程序改成正确的,运行一下。这样反复修改,就能熟悉C语言程序发生错误的原因和修改错误的能力。
◆注意:每次只改错一个地方,目的是现实发生该错误
的真正原因,要避免一次改动多个地方。带一个记录本记下英文错误提示信息和解决该错误问题的方法,积累程序调试经验。要善于利用调试工具。
C语言新手的晋级之路
第五步:海纳百川
◆经过上述过程,我们应该已经熟悉C语言各种语句的
语法和流程。现在可以研读别人编写的C语言经典程
序,看懂别人是如何解决问题的,学习解决问题的方法和程序设计技巧,提高自己的程序设计能力。
◆源程序的来源
●教材和讲义的例子
●图书馆里的C语言参考书
●网络上搜索各种源代码
●……
C语言新手的晋级之路 学习方法可以使你事半功倍
但是,除此之外你还需要:
◆相信自己有能力学好C语言
◆足够的耐心
◆足够的责任心
◆足够的细心
欢迎来到内存管理的雷区!
内存的概念 从物理上讲内存就是一块半导
体存储材料
任何需要被计算机执行的程序,包括指令和数据都要先从外部存储器(包括硬盘光盘等)调入内存后才能被执行
CPU需要精准地从内存中找到需要的数据参与运算
◆CPU如何找到想要的数据?
C 语言编译器眼里的内存
随着以下C 语句的编译运行,编译器做了哪些事情,内存会发生什么变化?
2000200120022003200420052006
0x876543213
01符号表
变量名地址数据类型
i c f
200020040x87654321
int char
double
i c
f
int i;char c;double f;i = 3;
0x876543220x876543230x876543240x876543250x876543260x876543270x87654328
变量名和地址建立了对应关系
内存的管理方法与地址
2000200120022003200420052006
0x876543213
01i
f
0x876543220x876543230x876543240x876543250x876543260x876543270x87654328
i 的地址
sizeof(int)=4
执行"i=3;"会发生什么?
1.找到i 的地址2000;
2.确定i 所占的字节2000~2003;
3.往这四个字节写入整型数值3(32
位)。
接下来,分析"f=i;"发生了什么 由此可见,访问变量必须知道其
地址和类型!
务必弄清楚存储单元的地址和存储单元的内容这两个概念的区别
◆地址:存储单元的编号◆内容:存储单元里存放的值
存储单元内容和地址的区别
2000200120022003200420052006
3
01
i