转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件使用 >> 聊天工具 >> 正文
Pointers 与 References(一)         

Pointers 与 References(一)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1310 更新时间:2009/4/25 1:00:00


译者注:本文节选自《How to Think Like A Computer Scientist,Learning with C++》第16章,作者Allen B. Downey)。此书对于国内“初级”C++爱好者来说,是一本不可多得的入门书籍。我的这版是PALM电子书。

正文:
    我认为最简单的方法解释Pointers 和 References就是举例证明了。首先让我们看一些表达式:
      x=1;  
    在表达式中,当你使用一个变量,特别是一个字母或标记符来存储数据。在编程过程中,上面等式中的变量一定是在等号的左边。
你可能已经注意到了编译器不充许你像这样写代码:
      1=x;      
     假如你不知道,你现在应该知道,并且理解它,这是最关键的。当你得到编译运行期错误,如:"lvalue requied in ..."是因为等号左边通常被当作lvalue的值,必须是内存中的一个地址。
    让我们想一想。假如你想存储数据,在存储数据操作之前知道在哪里存储。lvalue值就是在内存里的一段地址,来存放你的信息或等号右边的数据,同理的还有rvalue值。
    在C++中,你将经常这样或那样涉及内存管理。操作地址,C++有两种机制:Pointers 和 References。

16.1 什么是Pointers和 References

    Pointers和 References是特殊变量,以存储内存地址当作它们的值。在你学会这些之前,其它相关的不同类型的数据类型还有:
int,double和char。Pointers和 References存放着已经声明并赋值的,不同数据类型的,你所操作数据的地址。这两种机制 Pointers 和 References,有着不同的语法和不同的惯性使用方法。

16.2 声明Pointers和 References

    当对一个对象或数据类型的指针进行声明时,你照例地使用声明变量和数据类型的方法,仅是现在,对于声明SOMETYPE的指针,你需要在数据类型和它的变量之间加上星号*。
      SOMETYPE* sometype;

      int* x;      
    对于声明一个reference,你做的事情是和声明一个指针完全一样的,仅仅这次你不使用星号*,使用—来替换。
      SOMETYPE&  sometype;

      int&  x;      
可能你已经学过,空位在C++中是不被考虑的,所以以下的指针声明都是一样的效果:
       SOMETYPE*  sometype;

      SOMETYPE * sometype;

      SOMETYPE  *sometype;      
以下的references声明同理也是一样:
       SOMETYPE&  sometype;

      SOMETYPE & sometype;

      SOMETYPE  &sometype;      
16.3 “寻址”操作符

    尽管声明指针和references看似一样,但对它们进行赋值却是另一回事。在C++中,还有另外一种操作符需要你了解它,一个通过&符号来表示
的操作符,那就是“寻址”操作符。“寻址”操作符做的事如它的名称一样,返回一个变量、常量标识符或一个数组单元的地址,形式如当前类型的
指针。使用“寻址”操作符,加在变量之前使你得到返回的地址。
      SOMETYPE* x = &sometype; //必须被当作 rvalue 使用。      
    现在,不要把“寻址”操作符与声明一个reference搞混淆。因为使用此操作符被严格局限于rvalue,或是等号的右边。编译器知道
&SOMETYPE是“寻址”操作符,表示返回一个SOMETYPE类型指针的地址。
    此外,假如你有一个函数,以指针作为参数,你可以在不能声明成指针的变量上使用“寻址”操作符。通过这种方法,你不必再声明一个指针来充当此函数的参数使用。“寻址”操作符可返回一个指针,因此可以在这种情况下使用:
SOMETYPE MyFunc(SOMETYPE *x) 

{ 

  cout << *x << endl; 

} 



int main() 

{ 

  SOMETYPE i; 

  MyFunc(&i); 

  return 0; 

}     
......待续。

[1]


[办公软件]RIGHT函数和逻辑与&和Value函数在Excel中的应用举…  [聊天工具]Pointers 与 References(二)
[聊天工具]用POPO股海实时通功能 与POPO股神侃股票__天极Yes…  [常用软件]Expression3 与intuos2应用实例
[常用软件]在C/S体系中设置工作站与服务器的时钟同步  [VB.NET程序]vb.net 与 XML 的操作
[Delphi程序]Delphi 与 FORTRAN语言的混合编程  [Delphi程序]RSS 与 blog 阅读器:什么是 RSS 与 Atom ?
[Delphi程序]Delphi 与 XML 示例(直接利用IXMLDocument)  [Delphi程序]Delphi7 的 WebService 与 数据库
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 办公软件  · 系统软件
    · 常用软件  · 聊天工具
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台