C++及Windows可视化程序设计第3章7204191565.ppt

C++及Windows可视化程序设计第3章7204191565.ppt

  1. 1、本文档共144页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C及Windows可视化程序设计第3章7204191565

第3章 结构类型初探 3.1 指针 3.2 引用 3.3 数组 3.4 向量容器 3.5 类型定义关键字 3.6 枚举 3.7 结构 3.8 联合 实验 习题 虽然C++提供了基本数据类型,但它们的能力有限,还需要利用基本类型构造一些复杂的数据类型,这些以基本类型为基础构造出来的类型统称为构造类型。 其实,构造类型的每一个分量都是一个对象,它可以是基本类型或者构造类型。这些分量可以与基本类型对象一样被赋值并在表达式中使用。合理地使用它们,不仅能准确、清晰地描述复杂的数据结构,而且还使得程序显得清晰、简洁。 本节将探讨几个典型的构造类型,并简单说明它们的使用方法。随着应用的深入,还会构造出新的类型,这些构造类型相互之间又有一定联系,从而为程序设计提供新的舞台。 3.1 指针 假设将一个整型对象x存放在以0012FF7C开始的内存单元中,如果要访问对象x,既可通过对象的名字x,也可通过该对象的首地址0012FF7C。 可通过构造指针类型来实现这种操作。 3.1.1 构造指针类型 假设一个整型对象x的值为56,系统将为它在内存中分配一块连续的存储单元。如果这块存储区的首地址(即起始地址)为0012FF7C,则可以通过“x”取得存放x的首地址(称为取地址运算符,即x=0012FF7C)。 如果要访问对象x,既可以通过对象的名字x,也可以通过存放对象的首地址0012FF7C。 如图3.1所示,假设使用一个运算符“*”来间接引用地址(x)中存放对象的值,即“*x”表示通过这个地址访问对象x。下面的程序演示了这种方法,实现了所做假设。 #includeiostream using namespace std; void main(){ int x=56; cout″x的值等于″x ″,存储x的首地址是″xendl; cout″通过名字x使用″x″,通过首地址″ x″使用″*xendl; } 程序输出结果如下: x的值等于56,存储x的首地址是0012FF7C 通过名字x使用56,通过首地址0012FF7C使用56 现在想使用一个符号p代表x,即p=x。这时p代表x的地址,*p代表x内的值x,即*p=x。 运算符“*”使p间接引用了x的值,称为“间接引用”运算符或“递引用”运算符。 这样,就可以将上面的第2条输出语句改写成如下形式: cout″通过名字x使用″x ″,通过首地址″p″使用″ *pendl; 它实现了同样的输出结果,并验证了p和x之间的关系为: p=x和 *p=x。 既然p是一个标识符,也就是新数据类型的一个对象,系统也要给p分配一个存储空间。 假设用内存单元0012FF78作为存放对象p的首地址,显然p=0012FF78。不过,在这个地址0012FF78里不是存放p的值,而是存放变量x的首地址0012FF7C,即p=x。 这样就可以根据p找到 x,也就能对x进行存取。对象p和x之间的关系如图3.2所示。 图3.2 导出新的数据类型示意图 现在的问题是,如何表示这种新的数据类型?首先,它是针对整型对象的,所以可以借助整型类型int来声明。“p”这种形式已经被基本类型的对象使用,如果使用“int p;”的形式,则将p作为整型对象,显然是行不通的。如果使用“*”来标记这种数据类型,就可将p与整型变量区分开来,也就解决了问题。即 int *p;//声明称为构造类型的指针类型对象 p=x; //地址运算 *p=x; //值引用 因为这种数据类型声明的对象代表指向另一个数据类型对象的存储首地址,所以得名为“指针”类型。 这里是借助“*”号,而且与“*”号的位置没有关系,下面3种写法都是正确的: int * p;//“*”在中间,与谁都不连 int *p;//“*”与p连写为*p int* p;//“*”与int连写为int* 读者有时会对使用如下方法在声明指针的同时初始化指针的方式感到困惑,即: int *p=x; 实际上,选择“int* p;”,认为“int*”是一种指向整型的指针类型,用它声明指针对象p,p应该赋予x的地址,所以应是“p=x”。声明指向整型的指针对象p并同时初始化,也就顺理成章为“int* p=x”。显然,称p为指针对象(存放的是对象的首地址),而不是称*p为指针对象(*p代表指针指向的地址单元所存放的值)。 因为指针对象存放的是地址,所以必须有具体指向。 最常见的错误是声明了指针,没有为指针赋值。没有赋值的指针里含有随机地址,破坏性很大。 声明并同时初始化指针的方法避免

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档