Pointers 与 References(一)

男子要爱

男子要爱

2016-01-29 12:20

Pointers 与 References(一),Pointers 与 References(一)

Pointers 与 References(一)


编译:肖德时

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)



译者注:本文节选自《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; }     
......待续。
展开更多 50%)
分享

猜你喜欢

Pointers 与 References(一)

C语言教程 C语言函数
Pointers 与 References(一)

Pointers 与 References(三)

C语言教程 C语言函数
Pointers 与 References(三)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Pointers 与 References(二)

C语言教程 C语言函数
Pointers 与 References(二)

Pointers 与 References(四)

C语言教程 C语言函数
Pointers 与 References(四)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

References and arrays

编程语言 网络编程
References and arrays

JSP与Servlet之一

Java JAVA基础
JSP与Servlet之一

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

JSP由浅入深(10)—— Beans and Forms处理

JSP由浅入深(10)—— Beans and Forms处理

《第三次机战Z 时狱篇》0PP0改全SR通关心得

《第三次机战Z 时狱篇》0PP0改全SR通关心得
下拉加载更多内容 ↓