2016-12-14 54 views
2

說我有一些代碼,我有一個變量,我分配一個指針指向a指針分配完畢後,你能分配一個變量名給指針指向的東西嗎?

int a = 5; 
int* ptr = &a; 

然而,在此之後,我想給這個變量a佔據名稱b的存儲位置。

int b = a; // doesn't work, because it only copies the value 
&b = ptr; // doesn't work, not an assignable value 

ptr = &b; // doesn't work, this moves the pointer to point to b 
      // instead of renaming the location that ptr already pointed to 

這可能嗎? (這樣做沒有什麼好的理由 - 只是好奇而已。)

- 編輯:這個問題不是關於指針和引用的區別,而是如何通過使用它們來實現目標,因此不是「引用和指針有什麼區別?」

回答

2

我想給存儲器位置時變量「a」佔據名字「b」

你想要的是參考,如果我正確理解你的問題。

int& b = a;  // b is an alias of a 
assert(&a == &b); // the same memory location 

b = 6;   // the value of both a and b changed to 6 
0

不,分配(或重命名)a 變量名稱(標識符)是不可能的。

但是,如果你有興趣,可以隨時到

int * b; 
b = &a; 

其中b變量a。對*b進行的更改將反映爲a,反之亦然。

0

您可以指向同一個地方多個指針:

int i = 10; 
int* p1 = &i; 
int* p2 = &i; 
int* p3 = p2; 

正如你已經發現了,你不能說&b = ptr;

1

int& b = a結合整數參考ab。變量a的地址完全是未修改。 它只是意味着一個實際使用的所有用途(引用)使用分配給b的值。