- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c语言指针1
指针类型的本质分析 1、指针的本质 指针的本质:一种复合的数据类型。下面我将以下面几个作为例子进行展开分析: a)、int?*p;? b)、int?**p;? c)、int?(*parValue)[3];? d)、int?(*pFun)();? 分析: 所谓的数据类型就是具有某种数据特征的东东,比如数据类型char,它的数据特征就是它所占据的内存为1个字节,?指针也很类似,指针所指向的值也占据着内存中的一块地址,地址的长度与指针的类型有关,比如对于char型指针,这个指针占据的内存就是1个字节,因此指针也是一种数据类型,但我们知道指针本身也占据了一个内存空间地址,地址的长度和机器的字长有关,比如在32位机器中,这个长度就是4个字节,因此指针本身也同样是一种数据类型,因此,我们说,指针其实是一种复合的数据类型, 好了,现在我们可以分析上面的几个例子了。 假设有如下定义: int?nValue;?? 那么,nValue的类型就是int,也就是把nValue这个具体变量去掉后剩余的部分,因此,上面的4个声明可以类比进行分析: a)、int?*? *代表变量(指针本身)的值是一个地址,int代表这个地址里面存放的是一个整数,这两个结合起来,int?*定义了一个指向整数的指针,类推如下: b)、int?**? 指向一个指向整数的指针的指针。 c)、int?(*)[3]? 指向一个拥有三个整数的数组的指针。 d)、int?(*)()? 指向一个函数的指针,这个函数参数为空,返回值为整数。 分析结束,从上面可以看出,指针包括两个方面,一个是它本身的值,是一个内存中的地址;另一个是指针所指向的物,是这个地址中所存放着具有各种各样意义的数据。 2、对指针本身值的分析 下面例子考察指针本身的值(环境为32位的计算机): void?*p?=?malloc(?100?);? 请计算sizeof?(?p?)?=?? char?str[]?=?“Hello”?; char?*p?=?str?;? 请计算sizeof?(?p?)?=?? void?Func?(?char?str[100]) { 请计算?sizeof(?str?)?=???//注意,此时,str已经退化为一个指针,详情见 //下一篇指针与数组 }? 分析:上面的例子,答案都是4,因为从上面的讨论可以知道,指针本身的值对应着内存中的一个地址,它的size只与机器的字长有关(即它是由系统的内存模型决定的),在32位机器中,这个长度是4个字节。? 3、对指针所指向物的分析 现在再对指针这个复合类型的第二部分,指针所指向物的意义进行分析。 上面我们已经得到了指针本身的类型,那么将指针本身的类型去掉?“*”号就可得到指针所指向物的类型,分别如下: a)、int? 所指向物是一个整数。 b)、int*? 所指向物是一个指向整数的指针。 c)、int?()[3]? ()为空,可以去掉,变为int?[3],所指向物是一个拥有三个整数的数组。 d)、int?()() 第一个()为空,可以去掉,变为int?(),所指向物是一个函数,这个函数的参数为空,返回值为整数。 4、附加分析 另外,关于指针本身大小的问题,在C++中与C有所不同,这里我也顺带谈一下。 在C++中,对于指向对象成员的指针,它的大小不一定是4个字节,这主要是因为在引入多重虚拟继承以及虚拟函数的时候,有些附加的信息也需要通过这个指针进行传递,因此指向对象成员的指针会增大,不论是指向成员数据,还是成员函数都是如此,具体与编译器的实现有关,你可以编写个很小的C++程序去验证一下。另外,对一个类的静态成员(static?member,可以是静态成员变量或者静态成员函数)来说,指向它的指针只是普通的函数指针,而不是一个指向类成员的指针,所以它的大小不会增加,仍旧是4个字节。 2006-4-28 16:13
回复 218.249.191.* 2楼 指针运算符和* “和*”,它们是一对相反的操作,’’取得一个物的地址(也就是指针本身),’*’得到一个地址里放的物(指针所指向的物)。这个东西可以是值(对象)、函数、数组、类成员(class?member)等等。 参照上面的分析我们可以很好地理解与*。 使用指针的好处? 关于指针的本质和基本的运算符我们讨论过了,在这里,我想再笼总地
您可能关注的文档
- 混凝土、现浇结构(DEMO).doc
- 因数中间有0的乘法1.ppt
- 离心机操作程序说明.doc
- 班级管理中的成功素质培养.doc
- 5.3第三节功率.ppt
- 制动机常见故障.doc
- 建设工程风险对策分析?.doc
- 大学英语(一)1.doc
- 郑州外国语中学2010-2011学年上学期八年级期中考试英语B卷.doc
- 项目二十交流电路的分析.ppt
- 2025年宁夏回族自治区中医医院暨中医研究院上半年自主招聘急需紧模拟试卷及答案详解(历年真题).docx
- 2025年巫山县卫生健康委员会县属医疗卫生事业单位考调工作人员的笔试备考试题及答案详解(必刷).docx
- 2025年天津市北辰医院招聘高级专业技术人员(1人)模拟试卷含答案详解(综合卷).docx
- 2025年大连市西岗区教育系统自主招聘应届毕业生(第三批)考前自测高频考点模拟试题及答案详解(各地真.docx
- 2025年度中国文化遗产研究院应届毕业生招聘(6人)考前自测高频考点模拟试题及完整答案详解.docx
- 2025年度中国城市规划设计研究院(第二批)招聘(2人)模拟试卷有完整答案详解.docx
- 2025年宁夏回族自治区中医医院暨中医研究院上半年自主招聘急需紧考前自测高频考点模拟试题及参考答案详.docx
- 2025年广西百色西林县八达镇人民政府招聘村级财务会计委托代理服考前自测高频考点模拟试题及答案详解(.docx
- 2025年扎鲁特旗开发城镇公益性岗位的(55人)考前自测高频考点模拟试题及答案详解(名师系列).docx
- 2025年广州市海珠区华洲街道招聘雇员(4人)笔试备考试题附答案详解(轻巧夺冠).docx
文档评论(0)