- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章指针.
第六章指针
【计划课时】授课12课时+上机6课时(预习内容:教材第九章)
一、指针概述
1.地址
如果在程序中定义了一个“实体”(变量、数组、函数……),编译时系统就要给这些实体分配内存单元。分配规则:
存储类型 register
auto
atatic
extern 决定存储区域(动态存储区/静态存储区/寄存器组……) 数据类型 char
int
float
double等 决定占用的内存长度(字节数)和存储方式(ASCII码、补码等)
而内存单元是以字节为单位,每个字节都有一个编号(即“地址”)。如果将内存比作一个旅馆,内存单元就好比“床位”,而实体则好比“旅客”。这些“旅客”(实体)中,有单人型(char)、夫妇型(int)、家庭型(float,long,double等),还有团体型(数组等)。每个“实体”占用的内存单元是不同的。如:
char a;int b;float c;int d[3];int max
这些“实体”在内存中占用存储单元的情况可用下图表示(假定从内存单元地址1000开始):
a1000 a 字符型变量a占1个字节 b1001
1002 b 整型变量b占2个字节 c1003
1004
1005
1006 c 单实型变量c占4个字节 d1007
1008
1009
1010
1011
1012 d[0] 整型数组d占6个字节 d[1] d[2] max1013 max函数max 入口地址
通常我们关心的不是具体的地址值,而是每个实体的“起始地址”。
实体地址表示法1:
·普通变量——a,b,c
·数组d[3]——d(数组名) d[0],d[1],d[2]对二维数组,可用单下标法表示每行首地址。
如对char x[3][4],可用x[0]、x[1]、x[2]分别表示每一、二、三行的首地址。
·函数max ——max(函数名) 入口地址
取地址运算符(适用于普通变量或数组元素)
实体地址表示法2:指针适合于地址运算(加减等)
【说明】字符串是一种特殊的实体,存放在内存用户区的常量区(参见第四章第五节)。
2.指针(pointer)实体地址的一种表示法(便于编程处理)。指针是一种特殊的数据类型——存放的是某个实体的地址值。为什么要用指针?直接访问:通过 变量(实体)名→定义时分配的地址→变量值 访问变量
好比“先坐再买票”看电影,来一个观众,分配一个空位给他去坐,并且还要在纸上记一个某人坐在哪里。这种方式对用户来说很方便(“直接就座”),但对系统来说,“找某人”就极不方便(间接:查名字→座号)间接访问:通过“指针”访问变量好比先买票(票上座号——指针),再按号入座看电影。这种方式对用户来说属于“间接就座”,便对系统查找来说就很直接,且便于处理。尤其对于数组(团体),可通过指针简单自加或自减,对整个数组进行处理。
【变量的“指针”】变量的地址
3.指针变量 P159存放“指针”(地址值)的特殊变量。
定义方法: 类型标识符 *变量名
如 int *a; char *b;float *c;
此处,指针变量a,b,c分别指向某个未确定的整型变量、字符变量和实型变量。但指针变量a,b,c本身是整数(地址)。(编程测试可以发现在PC机上指针变量取值范围为-32767~32767,超出该范围编译就会出错,以此推算PC机地址长度为16位即2个字节)。以下程序亦可证实这一点:
main
char *a;long int *b;double *c;printf%d,%d,%d\n,sizeofa,sizeofb,sizeofc;
结果:2,2,2
【注意】数组名是常量,不能自加、自减或重新赋值,指针变量则可以。如 char a[10],*b,x5;a++; 或 a100; ax; ×(编译出错)b++; 或 b100; bx; √(编译不出错)
4.指针变量的运算与引用 P159
a.与指针有关的运算符 取地址运算符 ( 变量名前加一个,表示该变量的地址)* 指针运算符(“间接访问”运算符)*放在某个指针变量前,表示该指针变量所指向的变量。(注意与乘号“*”的区别)简单记忆:
· 如果p被定义成指向普通变量的指针变量,则*p代表该变量的值。
如 int *p,a5; pa;则*p代表变量a的值(5)。· 如果p被定义成指向某个数组的指针变量,则*p代表该数组中某个元素的值。如 int *p, a[3]1,2,3; pa; 则*p代表数组a中某个元素的值。【例】main
int *p,a[12]1,2,3,4,5;
clrscr;
pa;
for ;*p5;p+
原创力文档


文档评论(0)