程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++程序員如何向一個java工程師解釋何為reference引用?

C++程序員如何向一個java工程師解釋何為reference引用?

編輯:關於C++

繼昨天某Android程序員問我extern “c”的作用後,她今天又問我什麼是引用?

我回答他,引用就是別名,我引用你,我改變了,你也跟著改變。

那就再寫個博客吧!

可能沒學過C++的人更多的疑問就是,有了指針為何又要有引用呢?二者的區別何在?

A pointer can be re-assigned any number of times while a reference can not be re-seated after binding.
指針可以被重新賦值,而引用不可以

int x = 5;
int y = 6;
int *p;
p =  &x;
p = &y;
*p = 10;
assert(x == 5);
assert(y == 10);

int x = 5;
int y = 6;
int &r = x;

Pointers can point nowhere (NULL), whereas reference always refer to an object.
指針可以指向空,引用不能為空

You can’t take the address of a reference like you can with pointers.
你不能獲得一個引用的地址

A pointer has its own memory address and size on the stack (4 bytes on x86), whereas a reference shares the same memory address (with the original variable) but also takes up some space on the stack. Since a reference has the same address as the original variable itself, it is safe to think of a reference as another name for the same variable. Note: What a pointer points to can be on the stack or heap. Ditto a reference. My claim in this statement is not that a pointer must point to the stack. A pointer is just a variable that holds a memory address. This variable is on the stack. Since a reference has its own space on the stack, and since the address is the same as the variable it references. More on stack vs heap. This implies that there is a real address of a reference that the compiler will not tell you.

int x = 0;
int &r = x;
int *p = &x;
int *p2 = &r;
assert(p == p2);

You can have pointers to pointers to pointers offering extra levels of indirection. Whereas references only offer one level of indirection.
可以指針指向指針,不能引用引用引用。(繞口令,但我相信你能明白)

int x = 0;
int y = 0;
int *p = &x;
int *q = &y;
int **pp = &p;
pp = &q;//*pp = q
**pp = 4;
assert(y == 4);
assert(x == 0);

Const references can be bound to temporaries. Pointers cannot (not without some indirection):

const int &x = int(12); //legal C++
int *y = &int(12); //illegal to dereference a temporary

Use references in function parameters and return types to define useful and self-documenting interfaces.
函數的參數最好使用引用,如果返回值有意義,最好也返回引用。但是不要返回局部變量的引用

Use pointers to implement algorithms and data structures
在算法和數據結構中最好使用指針

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved