第10章指针..docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章指针.

第10章 指针 【计划课时】授课12课时+上机8课时 10.1 地址和指针的概念 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开始): a=1000 a 字符型变量a占1个字节 b=1001 1002 b 整型变量b占2个字节 c=1003 1004 1005 1006 c 单实型变量c占4个字节 d=1007 1008 1009 1010 1011 1012 d[0] 整型数组d占6个字节 d[1] d[2] max=1013 max( ) 函数max( )入口地址 通常我们关心的不是具体的地址值,而是每个实体的“起始地址”。 实体地址表示法1:直接访问(实体名) ·普通变量a,b,c——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) 实体地址的一种表示法(便于编程处理)。 指针是一种特殊的数据类型——存放的是某个实体的地址值。 【变量的“指针”】变量的地址 10.2变量的指针和指向变量的指针变量 10.2.1 指针变量 P202 存放“指针”(地址值)的特殊变量。 通常在C语言中,所谓“指针”就是指“指针变量”。 从现在开始,我们使用“指针”来表示“指针变量”。 为什么要用指针变量? C程序中访问(读写)一个变量有两种方式: 直接访问:利用实体名访问变量。访问变量的过程如下: 变量(实体)名→定义时分配的地址→变量值 好比“先坐再买票”看电影,来一个观众,分配一个空位给他去坐,并且还要在纸上记一个某人坐在哪里。这种方式对用户来说很方便(“直接就座”),但对系统来说,“找某人”就极不方便(间接:查名字→座号) 间接访问:通过“指针”访问变量 好比先买票(票上座号——指针),再按号入座看电影。这种方式对用户来说属于“间接就座”,便对系统查找来说就很直接,且便于处理。尤其对于数组(团体),可通过指针简单自加或自减,对整个数组进行处理。 指针变量定义方法: 类型标识符 *变量名 如 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,sizeof(a),sizeof(b),sizeof(c)); } 结果:2,2,2 【注意】数组名是常量,不能自加、自减或重新赋值,指针变量则可以。 如 char a[10],*b,x=5; a++; 或 a=100; a=x; ×(编译出错) b++; 或 b=100; b=x; √(编译不出错)b=x实际上不行,见P256。 指针变量可以通过变量说明语句或赋值语句进行初始化。可以把指

文档评论(0)

s4c2bg5I + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档