指针的本质.docVIP

  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文档。上传文档
查看更多
指针的本质

指针的本质 什么是指针?   其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据。这是一个非常重要的概念,有很多程序和算法都是围绕指针而设计的,如链表。 开始学习   如何定义一个指针呢?就像你定义一个其它变量一样,只不过你要在指针名字前加上一个星号。我们来看一个例子:   下面这个程序定义了两个指针,它们都是指向整型数据。 int*,,,,,,,,,,pNumberOne; int*,,,,,,,,,,pNumberTwo;   你注意到在两个变量名前的“p”前缀了吗?这是程序员通常在定义指针时的一个习惯,以提高便程序的阅读性,表示这是个指针。现在让我们来初始化这两个指针:,,,,,,,,,, pNumberOne,,,,,,,,,,=,,,,,,,,,,some_number; pNumberTwo,,,,,,,,,,=,,,,,,,,,,some_other_number;,,,,,,,,,,   号读作“什么的地址”,它表示返回的是变量在内存中的地址而不是变量本身的值。在这个例子中,pNumberOne,,,,,,,,,,等于some_number的地址,所以现在pNumberOne指向some_number。,,,,,,,,,,如果现在我们在程序中要用到some_number,我们就可以使用pNumberOne。 我们来学习一个例子:   在这个例子中你将学到很多,如果你对指针的概念一点都不了解,我建议你多看几遍这个例子,指针是个很复杂的东西,但你会很快掌握它的。   这个例子用以增强你对上面所介绍内容的了解。它是用C编写的(注:原英文版是用C写的代码,译者重新用C++改写写了所有代码,并在DEV,,,,,,,,,,C++,,,,,,,,,,和VC++中编译通过!) #include,,,,,,,,,,iostream.h void,,,,,,,,,,main() { //,,,,,,,,,,声明变量: int,,,,,,,,,,nNumber; int,,,,,,,,,,*pPointer; //,,,,,,,,,,现在给它们赋值: nNumber,,,,,,,,,,=,,,,,,,,,,15; pPointer,,,,,,,,,,=,,,,,,,,,,nNumber; //打印出变量nNumber的值: coutnNumber,,,,,,,,,,is,,,,,,,,,,equal,,,,,,,,,,to,,,,,,,,,,:,,,,,,,,,,nNumberendl; //,,,,,,,,,,现在通过指针改变nNumber的值: *pPointer,,,,,,,,,,=,,,,,,,,,,25; //证明nNumber已经被上面的程序改变 //重新打印出nNumber的值:,,,,,,,,,, coutnNumber,,,,,,,,,,is,,,,,,,,,,equal,,,,,,,,,,to,,,,,,,,,,:nNumberendl;,,,,,,,,,, }   通读一下这个程序,编译并运行它,务必明白它是怎样工作的。如果你完成了,准备好,开始下一小节。 陷井!   试一下,你能找出下面这段程序的错误吗? #include,,,,,,,,,,iostream.h int,,,,,,,,,,*pPointer; void,,,,,,,,,,SomeFunction(); { int,,,,,,,,,,nNumber; nNumber,,,,,,,,,,=,,,,,,,,,,25; //让指针指向nNumber: pPointer,,,,,,,,,,=,,,,,,,,,,nNumber; } void,,,,,,,,,,main() { SomeFunction();,,,,,,,,,,//为pPointer赋值 //为什么这里失败了?为什么没有得到25 coutValue,,,,,,,,,,of,,,,,,,,,,*pPointer:,,,,,,,,,,*pPointerendl; }   这段程序先调用了SomeFunction函数,创建了个叫nNumber的变量,接着让指针pPointer指向了它。可是问题出在哪儿呢?当函数结束后,nNumber被删掉了,因为这一个局部变量。局部变量在定义它的函数执行完后都会被系统自动删掉。也就是说当SomeFunction,,,,,,,,,,函数返回主函数main()时,这个变量已经被删掉,但pPointer还指着变量曾经用过的但现在已不属于这个程序的区域。如果你还不明白,你可以再读读这个程序,注意它的局部变量和全局变量,这些概念都非常重要。   但这个问题怎么解决呢?答案是动态分配技术。

文档评论(0)

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

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

1亿VIP精品文档

相关文档