- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C学习教程习题第五章
教学目标??? ●能够使用指针??? ●能用指针按引用调用向函数传递参数??? ●了解指针、数组与字符串之间的密切关系??? ●了解指针在函数中的使用??? ●能够声明和使用字符串数组5.1? 简介??? 本章介绍“C++编程语言一个最强大的特性——指针。指针是C++中最难掌握的问题之一。第3章介绍了引用可以用于实现按引用调用。指针使程序可模拟按引用调用,生成与操作动态数据结构,即能够伸缩的数据结构,如链表、队列、堆栈和树。本章介绍基本的指针概念,而且强调了数组、指针与字符串之间的密切关系.并包括一组很好的字符串操作练习。??? 第6章介绍结构中的指针使用。第9章和第10章介绍如何用指针和引用进行面向对象编程。第15章介绍动态内存管理技术以及生成和使用动态数据结构的例子。??? 把数组和字符串看成指针是从C语言演变而来的。本书后面会介绍把数组和字符串当作成熟的对象。5.2? 指针变量的声明与初始化??? 指针变量的值为内存地址。通常变量直接包含特定值,而指针则包含特定值变量的地址。因此可以说,变量名直接(directly)引用数值,而指针间接(indirectly)引用数值(如图5.1)。通过指针引用数值称为间接引用。??? 指针和任何其他变量一样,应先声明后使用。下列声明:??? int? *countPtr,? count;? 声明变量countPtr的类型为int*(即指向整型值的指针),或者说成countPtr是int的指针或countPtr指向整数类型的对象。变量count声明为整数,而不是整型值的指针。声明中的*只适用于countPtr。? 声明为指针的每个变量前面都要加上星号(*)。例如,下列声明:??? float? *xPtr,*yPtr;? 表示xPtr和yPtr都是指向float值的指针。声明中以这种方式使用*时,它表示变量声明为指针。指针可以声明为指向任何数据类型的对象。 ?? ?常见编程错误5.1??? 假设对指针的声明会分配到声明中逗号分隔的指针变量名列表中的所有指针变量名,从而将指针声明为非指针。声明为指针的每个变量前面都要加上星号(*)。??? 编程技巧5.1??? 尽管不是必需的,但在指针变量名中加上Ptr字样能更清楚地表示这些变量是指针,需要相应的处理。
??????????????????????? ??? 图5.1? 直接和间接引用变量??? 指针应在声明时或在赋值语句中初始化。指针可以初始化为0、NULL或—个地址。数值为0或NULL的指针不指任何内容。NULL是头文件iostream.h(和另外几个标准库头文件)中定义的符号化常量。将指针初始化为NULL等于将指针初始化为0,但C++中优先选择0。指定0时,它变为指针的相应类型。数值0是惟一可以不将整数转换为指针类型而直接赋给指针变量的整数值。5.3节将介绍将变量地址赋给指针。??? 测试与调试提示5.1??? 初始化指针以防止其指向未知的或未初始化的内存区。5.3? 指针运算符(地址)运算符是个一元运算符,返回操作数的地址。例如,假设声明:??? int? y = 5;??? int *yPtr;则下列语句:??? yPtr = y;将变量y的地址赋给指针变量yPtr。变量yPtr“指向”y。图5.2显示了执行上述语句之后的内存示意图。图中从指针向所指对象画一个箭头.表示“指向关系”。??? 图5.3显示了指针在内存中的表示,假设整型变量y存放在地址600000,指针变量yPtr存放在地址500000。地址运算符的操作数应为左值,(即要赋值的项目,如变量名).地址运算符不能用于常量、不产生引用的表达式和用存储类regtster声明的变量。??? ”*”运算符通常称为间接运算符(indirection operator)或复引用运算符(dereferencing operator),返回操作数(即指针)所指对象的同义词、别名或浑名。例如(图5.2再次引用),下列语句:?cout? ? * yPtr? ? endl;指向变量y的值(5),如同下列语句:??? cout? ? y? ? endl;
???????????????
???????????????????????? ? 图5.2? 指针指向内存中整数变量的示意图??? 这里使用*的方法称为复引用指针(dereferencing a pointer)。注意复引用指针也可以用于赋值语句左边,例如下列语句:??? *yPtr = 9;将数值9赋给图5.3中的y。复引用指针也可用于接收输入值,例如:??? cin *yPtr;复引用的指针是个左值。?????????
文档评论(0)