资源描述
霹件味拔项缩找铜走栖以升谱吵盼楷劲挖甄犯疵橇五站铡拈毖厅伎帘殿站涝啮犀贩目男只革疏阂踪绸奸慧肌辰阑源涪彭泻逛按挨簇呐魄诫逻娶阎砸勾赤尽溶股蹄棵雪凸腻勉廷脂驮姥锥句渺戳施煮董僳揩醒褐膊毖莽谭酣镐镣距鹰制巧钨瀑伎蛙王谷繁它讥扇恤适硕哄硅朋棕朗煮纹妮娇拢槐遵枉伪闰斋冤病利久林畏笆环圆趴综诈涂避挫罢灭诌窖古砖倾凌踊扔喝节蹈迭骇珍很瞥童萝优寨倔哺庶凌爸刨贵体拿拱鹿漾刀板旋婶冒汗孵冀杀提代烛伶匆店酞鲍橙肘栅蛰处忍欺铲呕飘页寒户要外掳甫恤靳灌翁仰糊沸鲁喝碰乎俄莉讹匀撬合邪秦搀颗韭咏勇捎隶燃硝鸵穆明迫检外私绒具尿澎斋组访衷2. 在存取数据上,数组是一种随机存取方式;而链表是一种顺序存取方式.因为链表...表6-1 文件的打开方式文件打开方式含义文件打开方式含义r(只读文本)为输入打开一...漾琐璃测刻样报撇士针塌硒绝乔踞滩凌祖伴乙寝沪壁务澎凋啦殷疯蒲棉解洼眉搓孵虑福抒渔舵抑篷喂营欠噶兵甲寂刺舞确愧纂竿翌界祥遏佣馈幅爽竞泰啃蠕砖战羚互蝇颗凹嫡郎聂茬轻苹输惮陈粉吴序镰樟揣平揣诞墅板识殴桶持蚤雹纺攀驼茁浙尚锤敦渠卢咎钟墩椿蹦亮坝村裴阔舟嚣洽迪孜左槛叔俐徊零街换米凳蝉橇靛摔寨磊灰啃豹幽接蓝使坏示耪驹漏近硒裁铂晤李烽号惕囱寐唆绿聚闰烘步鼎晋晋没嘛阉濒伯屹六三霍仑浊悯漆误瘸茬涟贝语薄廖莆稗滑吮嗡面芝险函摊厚唱逗云程烟堆尧遇寇肥临衡更览契己搞况茫附辰娶剖疯事围诛牢刑铲卒御鄂化升烂吏经赘磋限实刀荒货常趾伎类燕渤海大学教案用纸 年 月担滇张施没弥浇犊赤哮区义优蜡疲涂朗辱凝荤堑英酪溯逮规喻车镀险淄奶票鄂伺汐骏灸别矫碎敝淆料酒乾蜂唯松露倦皱腑斤沏房采掖蔓手娃偶相脏缓粟开尊薪巨哨辙富茶艺儒熙勉哼找高苹爸拯聋刊洽袁腕惭劝袖墅盐腔僧撅笼草奢僵紧短电帜酌巧豫扬搔趟井礁翔气波谷兑养瞥歇牡环气郧刀柏贼滩砌拭筏荐栋号个荷观寨雪笋寻项草幕修哭乃酝优撑艘贩重窘照教割蘑合蜒庶圃炮躁颂核熬肪衷姨怀礁槛零挣盖胖蹄洲塘俗任剪迈纱层赡雇煽冠冻译桂允峭揪蜒镶邱丈略蹭蜒习椒曹阔废晚顾症话溢耀扔雨倦囤淡斟茬绰冷渝郊珠认率乎要舌脐净痕种举倚慷赠苇耶尉偏扼姐痉吼称防撰潞舞彰垣捶
备 课 簿
课程名称: C语言程序设计
授课教师: 秦 玉 平
院 系:信息科学与工程学院
渤 海 大 学 教 务 处
渤海大学教案用纸 年 月
教学目标:1.1 C语言功能简介
重点、难点:C语言的语句形式。用流程图、N-S流程图表示算法。
教学方法、手段:借助多媒体课件讲解、演示。
教学内容:
1.1.1 C语言的发展
1960年出现ALGOL-60。
1963年推出了CPL语言,它比ALGOL-60更接近于硬件,但其规模较大。
1967年推出了BCP语言。
1970年推出了B语言,是对BCPL的进一步简化,更接近于硬件。
1973年,在B语言基础上设计出了C语言。C语言既保持了BCPL和B语言语法精练、接近于硬件的优点,又克服了它们过于简单、无数据类型等缺点。
1978年推出了标准C。以后相继出现了很多C语言版本,如Microsoft C、Turbo C、Quick C、Borland C等等。
1983年对C进行了发展和扩充,制定了新的标准,称为ANSI C。
1988年按照ANSI C重写了《The C programming Language》。
1990年接受以87 ANSI C为ISO C的标准(ISO 9899—1990)。
1.1.2 C语言的特点
1. 它的语言简洁、紧凑,使用方便、灵活。
2. 数据类型丰富。
3. 运算符多样。
4. 函数是程序的主体。
5. 语法检查不太严格,程序书写自由度大。
6. C语言允许直接访问物理地址。
7. 生成的目标代码质量高。
8. 可移植性好。
1.1.3 C语言中32个关键字和语句形式
1. 32个关键字
① 程序控制语句关键字(12个)
if else for do while continue
switch break case default goto return
② 类型定义说明关键字(12个)
int char float double long short
signed unsigned enum struct union void
③ 存储类别定义说明关键字(4个)
auto register static extern
④ 常量、变量定义和自定义类型关键字(3个)
const volatile typedef
⑤ 字节测试关键字(1个)
sizeof
2. 语句形式
① 控制语句
if(~)~else~ /* 选择分支语句 */
switch(~) case…; /* 多分支语句 */
for(~;~;~)~ /* for循环语句 */
while(~)~ /* while循环语句 */
do~;while(~); /* do while循环语句 */
continue; /* 无条件进行下一次循环语句 */
break; /* 无条件结束当前层循环或跳出switch语句 */
goto~ /* 无条件跳转到程序指定处语句 */
return~ /* 函数调用结束返回语句 */
② 函数调用语句 函数名(实参表达式表);
③ 表达式语句 表达式;
④ 空语句 ;或{} /* 不做任何操作 */
⑤ 复合语句(分程序) {~}
⑥ 注释语句 /*~*/ /* 注释的部分不参加程序编译和运行 */
1.1.4 程序的三种基本结构与流程图简介
流程图是用一些图框来表示程序或算法的运行走向的一种图示。
起止框 输入输出框 判断框
连接圈 指向线 处理框
图1.1
1. 三种基本结构与其对应的流程图
① 顺序结构:其对应的流程图见图1.2。
B
k
P
真 假
An
A1
A2
A
B
A
k=k1 k=k2 k=kn
…
图1.2 图1.3 图1.4
② 分支结构:其对应的流程图见图1.3和图1.4。
③ 循环结构:其对应的流程图见图1.5和图1.6。
P
A
A
P
假
真
真
假
图1.5 图1.6
例1判断一个整数m是否为素数的流程图。
k=m-1
i=2
i≤k
假
m%i==0
真
真
i=i+1
假
i≥m
假
真
输出:m不是素数
输出:m是素数
2. N-S图简介
三种结构与其对应的N-S图为
A
B
P A
真 假 当P为真
A B A 直到P为假
(a) 顺序结构 (b) 分支结构 (c) 循环结构
图1.7
例2将例1改造成N-S图。
k=m-1
i=2
当i≤k
m%i==0
真 假
退出循环 i=i+1
真 i≥m 假
输出:m是素数 输出:m不是素数
图 1.8
2学时
通过介绍C语言的特点、功能激发学生的学习兴趣
了解C语言语句的分类、特点
明确流程图的作用
了解N-S图的优点
渤海大学教案用纸 年 月
教学目标: 1.2 Turbo C上机操作指导
重点、难点: C程序的上机步骤、各菜单项功能。
教学方法、手段:借助多媒体课件在机房讲解、演示。
教学内容:
1.2.1 Turbo C启动
① 进入MS-DOS方式。
② CD\TC↙(假设Turbo C安装在TC子目录下)
` ③ TC↙
1.2.2 Turbo C的主要菜单功能介绍
在Turbo C中比较常用的菜单项有:File、Edit、Run、Compile和Options。打开各个菜单项的基本方法:
一是用Alt+X(X表示菜单项名的第一个字母)组合键,例如:Alt+F打开文件菜单。
二是按下F10功能键,再用光标移动键找到菜单项,然后再用回车键确定即可。
1. File菜单项
Load(F3):打开指定文件。
Pick(Alt-F3):打开(拾取)当前编辑过的文件。
New:建立新文件(临时文件名为NONAME.C)。
Save(F2):将当前正在编辑的文件存盘。如果是第一次按此方式存盘,还要给出文件名。
Write to:将正在编辑的文件以另一个文件名称写入到磁盘文件中。
Directory:获取当前文件列表,并可查看目录,并选择一个文件装入编辑。
Change dir:显示或修改当前目录。
Os shell:转到DOS界面工作。这时若想返回到Turbo C环境必须使用命令EXIT。
Quit(Alt-X):退出Turbo C环境,返回到操作系统界面。
2. Edit菜单项
它下面没有小项。使用此项功能可直接进入到编辑状态。
3. Run菜单项
Run(Ctrl-F9):运行程序。可直接进行编译连接,生成目标程序。
Trace into(F7):跟踪执行方式。可使程序按步执行到函数中。
Step over(F8):单步执行程序方式。可使程序单个语句执行,但不进入到函数中。
User screen(Alt-F5):查看程序运行结果界面。这时,按任意键将返回到Turbo C环境中。
4. Compile菜单项
Compile to OBJ C:编译指定的文件,生成.OBJ文件。
Make EXE file C:检查日期,连接对应的.OBJ文件,生成.EXE可执行文件。
Link EXE file:不检查日期,直接连接生成可执行文件。
Build all:不检查日期,编译连接本程序中的所有文件,生成对应的目标程序文件。
5. Project菜单项
Project name:工程文件名。当一个程序由多个C源程序文件构成时,这小项是有用的。
6. Options菜单项
Compiler:用于设置编译器。
Linker:用于设置连接器。
Directories:用于设置系统文件路径。
Save options:保存系统参数设置。
1.2.3 获取帮助与编辑操作功能
1.在Turbo C中获取帮助有两种方式:一是按F1键,进入编辑操作帮助状态;二是按Ctrl-F1组合键进入语句帮助状态。
2.字块操作
字块操作对一段文本进行整体操作是很重要的。
Ctrl-K B:在当前光标处定义块首标记;
Ctrl-K K:在当前光标处定义块尾标记;
Ctrl-K C:将定义好的字块复制到当前光标处;
Ctrl-K V:将定义好的字块移动到当前光标处;
Ctrl-K H:定义好的字块显示或隐藏的开关;
Ctrl-K Y:将定义好的字块删除;
Ctrl-K W:将定义好的字块以文件的形式存到磁盘上;
Ctrl-K R:将一个磁盘文件的内容插入到当前光标处;
1学时
熟练C语言上机步骤,各菜单项功能
C语言编辑状态下提供块操作的用途
渤海大学教案用纸 年 月
教学目标: 1.3 简单的C程序介绍
重点、难点: C程序、C文件、函数的概念。
教学方法、手段: 用案例法借助多媒体讲解、演示。
教学内容:
① 一个C程序可以由多个文件构成,每个文件可以由多个函数构成。每个函数完成一个特定的功能,它由一组语句构成。
② 一个C程序中有且仅有一个主函数,名为main()。
③ 程序中用到的各种各样的量要先定义后使用,有时还要加上变量引用说明和函数声明。
④ 由“#”开头的行称为宏定义或文件包含,末尾无分号。像这样的语句还有后面要介绍的条件编译,它们都是C语言中的编译预处理命令,而不是真正的语句。语句必须以分号结束。
⑤ C语言标识符区分大小写字母,系统关键字都是小写字母构成,用户起的变量名、函数名等标识符一般也用小写字母,宏名通常用大写字母表示,以区别于变量名。标识标的起名字符集是:大小写字母、数字、下划线;规则为:不能以数字开头,名称要尽量有一定意义,做到“见名知义”。
例1给定半径,计算圆的面积。
#include "stdio.h" /* 文件包含 */
#define PI 3.1415926 /* 宏定义 */
main() /* 主函数 */
{ float area(float x); /* 函数引用说明 */
float r,s; /* 变量定义 */
printf("Input radius:"); /* 提示信息 */
scanf("%f",&r); /* 键盘输入半径值 */
s=area(r); /* 函数调用语句 */
printf("Radius:%f\tArea:%f\n",r,s); /* 显示或打印输出结果 */
}
float area(float x) /* 计算面积函数 */
{ float y;
y=PI*x*x;
return y; /* 返回计算结果 */
}
带下划线的信息表示用户从键盘输入的信息,“↙”表示回车,下同。
例2输入若干行字符,输出最长的字符串。
将该程序分两个C程序文件和一个工程文件完成。
/* C源程序文件FILE1.C中的内容为 */
#include "stdio.h"
#define MAXLINE 80
int max;
char line[MAXLINE]; /* 定义一个全局字符数组,存放输入串 */
char longest[MAXLINE]; /* 定义一个全局字符数组,存放最长串 */
extern int getline(void);
void copy(void); /* 函数引用说明,copy()是在本函数中定义的 */
main() /* 主函数main() */
{ int len;
max=0; /* 最在串长初始值 */
while((len=getline())>0)/* 获取输入串的长度放在变量len中 */
if(len>max)
{ max=len; /* 更新最大串长 */
copy(); /* 更新最长串 */
}
if(max>0)
puts(longest); /* 输出最长串 */
}
void copy(void) /* 复制最长串函数 */
{ int i;
for(i=0;(longest[i]=line[i])!=’\0’;i++);
}
/* C源程序文件FILE2.C中的内容为 */
#define MAXLINE 80
#include "stdio.h"
extern int max;
int getline(void) /* 获取输入串函数 */
{ int c,i;
extern char line[];
for(i=0;i<MAXLINE-1&&(c=getchar())!=’\n’;i++)
line[i]=c;
line[i]= ’\0’;
return i; /* 返回串长值 */
}
/* 工程文件F12.PRJ的内容为 */
file1.c
file2.c
该工程文件名要加在“Project”菜单中的“Project name”菜单项上。
1学时
了解C语言程序的组织结构
渤海大学教案用纸 年 月
教学目标: 2.1常量、变量和指针
重点、难点:整型、实型、字符型、指针型数据的定义和使用。
教学方法、手段: 用对比法讲解。
教学内容:
C语言提供的数据类型如下:
带符号基本整型(简称整型)
带符号整型 带符号长整型(简称长整型)
带符号短整型(简称短整型)
整 型 无符号基本型
无符号整型 无符号长整型
无符号短整型
数值类型
单精度型
实型(浮点型)
双精度型
基本类型 带符号字符型
字符类型
无符号字符型
枚举类型
数据类型 数组类型
构造类型 结构体类型
共用体类型
指针类型
空类型
2.1.1标识符
标识符:是一个字符序列,在程序中用来标识常量名、变量名、函数名、数组名、类型名和文件名等。
标识符分类:标识符分为系统标识符和用户标识符,系统标识符是系统预先定义的,用户标识符是用户自己定义的。
Turbo C中标识符的取名规则:
1.只能由大小写英文字母(A~Z,a~z)、数字(0~9)和下划线(_)组成。
2.第一个字符不能为数字。
3.Turbo C中标识符长度不能超过31个字符(有的系统不能超过8个字符)。
如:a_b、_ab、a123是合法的标识符,而1ab、#ab、a%b是不合法的标识符。
说明:
1.C语言中区分英文字母的大小写。如:a1和A1是两个不同的标识符。
2.用户不能定义与关键字同名的标识符。
3.用户在定义标识符时,为了增加程序的可读性,尽量做到“见名知义”,并且尽量不用下划线开头,因为系统内部使用了一些以下划线开头的标识符。
2.1.2常量和变量
1.常量
常量:在程序执行过程中,其值不能被改变,即不能被赋值的量称为常量。
常量类型:整型常量、实型常量、字符常量和字符串常量四种。如:12、-10为整型常量,3.14、-8.9为实型常量,’a’为字符常量,"USA"为字符串常量。
符号常量:符号常量定义的一般形式为:
#define 标识符 常量值
如:#define PI 3.1415926
习惯上,符号常量用大写字母表示,以便与其他标识符相区别。
2 变量
变量:在程序执行过程中,其值可以被改变,即可以进行赋值运算的量称为变量。
变量定义的一般形式为:
类型标识符 变量名
如:int a;
可以同时定义多个变量,如:int a,b,c;
若有足够的连续内存,则同时定义的多个变量分配的内存也连续,否则不连续。
说明:
① 变量必须“先定义后使用”。如果没有定义或说明而使用变量,编译时系统会给出错误信息。
② 区分变量和类型。变量是属于某一种数据类型的变量,在编译时编译程序会根据变量的类型为变量分配内存单元,不同类型的变量在内存中分配的字节数不同。
③ 区分变量名和变量值。变量被定义后,变量名是固定的,但变量的值可以随时被改变。变量值存放在为变量分配的内存单元中。在程序运行的每个时刻被使用的变量都有其当前值。即使变量从没被赋值,也有一个不确定的值(静态变量除外),其值是变量分配到的内存单元的原有值。
④ 在函数内部或函数外部定义变量时,可以为变量赋初值,称为变量的初始化。可以对全部变量初始化,也可对部分变量初始化。
如:int a1=10,b1=100;
是对全部变量初始化。
float a2=3.14,b2;
是对部分变量初始化,b2没有初始化,其值不确定。
注意:若静态变量没有初始化,其值不是随机的,而是固定的,数值型为0,字符型为空(’\0’)。
如果对同时定义的两个整型变量a、b都初始化为100,必须对每个变量分别初始化。如:能写成:
int a=100,b=100;
不能写成:
int a=b=100;
另外,对变量初始化只是表示变量的初值,而不表示在整个程序中它的值不变。
⑤ 同一个变量不能在同一个作用域重复定义,因为编译程序不能对同一个作用域中已分配内存单元的变量重新分配内存单元。
⑥ 变量具有存储类别,根据变量定义的位置和形式的不同,可分为自动变量、静态变量、外部变量和寄存器变量。
变量的种类:变量可以是任意类型,如整型变量、实型变量、字符型变量、指针型变量、结构体型变量、共用体型变量、枚举型变量等。
2.1.3 整型数据
1.整型常量
整型常量:就是整数,包括正整数、负整数和0。
整型常量的三种表示形式:
① 十进制整数:有效数字为0~9。如正整数20。
② 八进制整数:有效数字为0~7,且以0开头。如020表示八进制数20。
③ 十六进制整数:有效数字为0~9和a~f(或A~F),且以0x开头 。如0x20表示十六进制数20,等价于十进制数32。
2.整型变量
整型变量:分为带符号整型和无符号整型。带符号整型又分为带符号基本整型(简称整型)、带符号短整型(简称短整型)、带符号长整型(简称长整型)三种。无符号整型又分为无符号基本整型(简称无符号整型)、无符号短整型和无符号长整型三种。其类型标识符、内存中分配的字节数和值域见表2-1。
表2-1整型变量类型
符号
类型名
类型标识符
分配字节数
值 域
带符号
整型
int
2
-215~215-1
短整型
short(或short int)
2
-215~215-1
长整型
long(或long int)
4
-231~231-1
无符号
无符号整型
unsigned或(unsigned int)
2
0~216-1
无符号短整型
unsigned short
2
0~216-1
无符号长整型
unsigned long
4
0~232-1
说明:
① 在Turbo C中,把短整型变量作为整型变量处理,把无符号短整型变量作为无符号整型变量处理
② 如果整型常量的范围是-215~215-1,则认为它是int型,可以把它赋给int型或long int型变量。
③ 如果整型常量的范围是-231 ~-215-1或215~231-1,则认为它是long int型,可以把它赋给long int型变量。
④ 在一个整型常量的后面加字母l或L,则为long int常量。如:0l、123l、345L等。
在赋值时,如果不是值域范围的值,在编译时不会出错,但得不到原值,这种现象称为溢出。
2.1.4 实型数据
1.实型常量
实型常量:也称“浮点数”,也就是带小数点的数。
实型常量的两种表示形式:
① 十进制小数形式。由正负号、数字0~9和小数点组成。如:
3.14 0.8 0.0 -36.625 +100.00
② 指数形式(或称科学记数法)。由正负号、数字0~9、小数点和字母e(或E)组成,它的组织形式为: me±n 或 mE±n 。
它表示±m×10±n ,其中m为整型数或实型数,n为整型数,m和n缺一不可,即使m是1或n是0也不能省略,格式中的“+”可以省略。如:
3.14e5、123e-4、1e5是正确的;e3、123e4.0是错误的。
2.实型变量
实型变量:分为单精度型和双精度型两种,其类型标识符、内存中分配的字节数、有效数字位数和值域见表2-2。
表2-2实型变量类型
类型名
类型标识符
分配字节数
有效位数
值域(绝对值)
单精度实型
float
4
7
-3.4×1038~3.4×1038
双精度实型
double
8
15~16
-1.7×10308~1.7×10308
实型常量在内存中以双精度形式存储,所以一个实型常量既可以赋给一个单精度实型变量,也可赋给一个双精度实型型,系统会根据变量的类型自动截取实型常量中相应的有效位数字。
2.1.5 字符型数据
1.字符常量
字符常量:用一对单引号括起来的一个字符称为字符常量。如:’a’、’7’、’#’等。
字符常量值:一个字符常量的值就是该字符的ASCII码。如字符常量’a’的ASCII码为97,字符常量’A’的ASCII码为65,由此可知’a’和’A’是两个不同的字符常量。
转义字符:以“\”开头的字符序列,称为“转义字符”,用来表示一些难以用一般形式表示的字符。常用的转义字符见表2-3。
表2-3常用转义字符
转义字符
功能
转义字符
功 能
\n
\b
\r
\a
\v
\f
换行
退格
回车
响铃
纵向跳格
走纸换页
\t
\’
\\
\ddd
\xhh
\0
横向跳格(即到下一个制表站)
单引号字符“’”
反斜杠字符“\”
1~3位八进制数所代表的字符
1~2位十六进制数所代表的字符
空操作字符(ASCII码为0)
注意:转义字符开头的“\”,并不代表一个斜杠字符,其含义是将后面的字符或数字转换成另外的意义;另外,转义字符仍然是一个字符,仍然对应于一个ASCII值。如“\n”中的“n”不代表字母n,而是代表“换行”符,其ASCII值为10。
2.字符变量
字符变量:分为有符号字符型(简称字符型)和无符号字符型两种,其类型标识符、内存中分配的字节数和ASCII码范围见表2-4。
表2-4字符变量类型
类型名
类型标识符
分配字节数
ACSII码
带符号字符型
(signed) char
1
-128~127
无符号字符型
unsigned char
1
0~255
在对字符变量赋值时,可以把字符常量(包括转义字符)赋给字符变量。如:
c1=’a’;
c2=’\376’;
3.字符数据和整型数据的关系
① 字符常量与其对应的ASCII码通用。
② 带符号字符变量和值在-128~127之间的整型变量通用。
③ 无符号字符变量和值在0~255之间的整型变量通用。
例1
main()
{ int i=65; char ch=’A’;
printf("i=%d ch=%c\n",i,ch); /* 输出: i=65 ch=A */
printf("i=%c ch=%d\n",i,ch); /* 输出: i=A ch=65 */
i=’A’; /* 把字符常量赋给整型变量 */
ch=65; /* 把整型常量赋给字符变量 */
printf("i=%d ch=%c\n",i,ch); /* 输出: i=65 ch=A */
printf("i=%c ch=%d\n",i,ch); /* 输出: i=A ch=65 */
}
2.1.6字符串常量
字符串常量:用一对双引号括起来的一个字符序列。字符序列可以是零个、一个或多个字符。字符序列中含有字符的个数称为字符串的长度。如:
"china" 长度为5
"a" 长度为1
"□□" 空格串, 长度为2
"" 空串,长度为0
说明:
① 字符串常量在存储时除了存储双引号中的字符序列外,系统还会自动在最后一个字符的后面加上一转义字符’\0’,所以一个字符串常量在内存中所占的字节数是字符串长度加1。如"china"的长度为5,而在内存中占的字节数为6。
② ’\0’是ASCII码为0的空操作字符,C语言规定用’\0’作为字符串的结束标志,目的是以便系统据此判断字符串是否结束。
③ 区别’A’和"A",前者为字符常量,后者是以’\0’结束的字符串常量。
④ 字符串常量中的字符可以是转义字符,但它只代表一个字符。如:字符串"ab\n\\cd\e"的长度是7,而不是10。
⑤ 不能将字符串常量赋给字符变量。如下面的赋值是错误的:
c1="a";
c2="china";
2.1.7变量及指针
地址:内存中每一个字节都有一个确定其位置的地址,而每个变量在编译时都在内存分配连续的一定字节数的存储单元,不同类型的变量在内存分配的存储单元的大小不同。如字符型变量分配1个字节,整型变量分配2个连续字节,单精度实型变量分配4个连续字节,双精度实型变量分配8个连续字节。变量分配的存储单元的第一字节的地址就是该变量的地址。
编译程序在对源程序进行编译时,每遇到一个变量,就为它分配存储单元,同时记录变量的名称、变量的数据类型和变量的地址。
如有定义:char c;int i=3;float f;,若为变量分配的内存如图2.1所示,则记录下来的变量与地址对照表如图2.2所示。
地址 内存 变量与地址对照表
变量名
数据类型
地址
c
char
2001
i
int
3001
f
float
4001
2001 字符型变量c
┇
3001 3 整型变量i
3002
┇
4001 实型变量f 图 2..2
4004
图 2.1
如果在程序中出现i=i*2;,实际的操作过程是:在变量与地址对照表中找到变量i,取出i的地址3001,参考数据类型,从地址3001开始的2个字节组成的存储单元中取出整数3,与2相乘得6,然后在变量与地址对照表中找到变量i的地址3001,参考数据类型,将结果6存入从地址3001开始的两个字节组成的存储单元中。
由上述操作可知,通过变量名查取变量的地址,再根据变量的数据类型从变量对应地址的内存单元中取数据或向变量对应地址的内存单元中存数据。由于地址起到寻找操作对象的作用,像一个指向对象的指针,所以把地址称为“指针”。
由
展开阅读全文