第8章 善于利用指针(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档