C语言程序设计PPT课件(共13章)第8章指针.pptxVIP

C语言程序设计PPT课件(共13章)第8章指针.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 指针 目录 CONTENT 8.1 8.2 8.3 指针概述 指针运算 指针与数组 8.4 8.5 8.6 指针与字符串 多级指针 指针与函数 8.7 8.8 指针与函数 void 指针 8.1 指针运算 8.1.1 内存地址与指针 1. 内存地址 开发者编写的 C 语言程序属于逻辑程序,属于具有可读性的文本,这些程序必须要经 过预处理、编译、汇编以及链接之后成为可执行文件才能运行在计算机中。一旦运行可执行 文件,则程序中的指令、常量和变量等都将载入到内存中,CPU 将对内存进行取值操作。 计算机的内存是以字节为单位的存储空间,每个字节单元都有一个唯一的编号,这个编号即 为内存地址。如果在程序中定义一个变量,则系统会根据变量的数据类型为其分配固定大小 的内存空间,因此,通常所说的变量的地址指的是存储变量的内存空间的首地址。在 C 语 言程序中可以通过取地址符获得某种数据在内存中的地址,测试代码如例 8-1 所示。 8.1.1 内存地址与指针 分析: 如上述示例中,第 7行代码通过取地址运算符“”获取变量 a 所在的内存地址,格式 符号“%p”表示以十六进制形式输出地址。输出地址并不是始终不变的。 8.1.1 内存地址与指针 上述程序运行后,变量与内存地址的关系如图 8.1 所示。 如图 8.1 所示,变量 a 中保存的数值为 5,其占用内存空间为 4 个字节,该内存空间的 起始地址为 0x7fff0b78bbec。 8.1.1 内存地址与指针 2. 指针变量 由于通过地址能访问指定的内存存储单元,可以认为地址“指向”该内存单元。在 C 语言中有专门存放内存单元地址的变量类型,即指针类型。如果有一个变量专门用来存放内 输出: 分析: 存地址,则该变量为指针变量。定义指针变量的一般形式如下所示。 其中,“*”表示该变量为指针变量,变量名即为定义的指针变量名,类型说明表示指针 指向的数据的类型,如 int *p;表示指针指向的数据为整型数据。 指针变量存放内存地址,通过指针即可访问内存上保存的数据,也可以认为该指针指向 数据,如图 8.2 所示。 8.1.2 指针变量的赋值 指针变量与普通变量一样,不同的是指针变量中保存的是内存地址,在使用指针变量之 前不仅需要定义,而且必须赋予具体的值。为指针变量赋值有以下两种方法。 1. 同时定义与赋值 定义指针变量的同时进行赋值,具体如下所示。 int a; //定义整型变量 int *p = a; //定义指针变量 p,被赋值为变量 a 的地址 2. 先定义后赋值 先定义指针变量后再进行赋值,具体如下所示。 int a; //定义整型变量 int *p; //定义整型指针 p = a; //将变量 a 的地址赋值给指针变量 p 注意: 先定义后赋值指针变量时,不需要加“*”。 8.1.3 指针变量的引用 在上一小节中,指针变量先定义后赋值时,赋值操作中的变量名前不能使用“*”号, 因为此时使用“*”号表示引用该指针变量,即获取指针变量保存的内存地址上的值(获取 指针指向的值)。由此可知,在 C 语言中,指针变量名前的“*”号在不同情况下,具有不 同的功能,具体如下。 int a; int *p = a; /*同时定义与赋值,此时*号表示变量 p 为指针变量,除此之外,无其他意义*/ int a; int *p; p = a; /*指针变量 p 保存变量 a 的地址,不能使用*号*/ printf(%d\n, *p); /*(*p)表示获取指针变量指向的值,此时*号表示引用*/ 8.1.3 指针变量的引用 指针变量的引用如例 8-2 所示。 分析: 如上述示例中,第 6 行代码定义了指针变量 p 并将变量 a 的地址赋值给变量 p。第 8、9 行代码同样都是输出变量 a 的地址,第 8 行代码传入的参数为a,第 9 行代码传入的参数 为 p,根据输出的地址值(地址相同),可得出 p 与a 相等,证明变量 p 保存变量 a 的地址 值。第 10 行代码输出变量 a 的值,传入的参数为*p,此时的“*”号表示引用,即获取指针 输出: 分析: 变量 p 指向的变量。第 13、14 行代码分别为定义指针变量 q 以及赋值指针变量 q。第 16、 17 行代码同样为输出变量 b 的地址,且传入的参数分别为b、q,根据输出的地址值(地址 相同),可得出 q 与b 相等,证明变量 q 保存变量 b 的地址值。第 18 行代码输出变量 b 的 值,传入的参数为*q,“*”号同样表示引用。 8.1.4 空指针 指针变量是用来保存内存地址的变量,如果定义一个指针,且定义时未保存任何内存地 址,则该指针为野指针。野指针在程序中保存的地址值是随机的,即内存中的某一段空间的 地址,如例

您可能关注的文档

文档评论(0)

139****1983 + 关注
实名认证
文档贡献者

副教授、一级建造师持证人

从事职业教育近20年,高级职称。

领域认证该用户于2023年06月21日上传了副教授、一级建造师

1亿VIP精品文档

相关文档