2013-01-04 57 views
0

我學習C++,我發現這對一本書:指針和引用操作符(&)

#include <iostream> 
using namespace std; 

int main() 
{ 
int Age = 30; 
int* pInteger = &Age; // pointer to an int, initialized to &Age 

// Displaying the value of pointer 
cout << 「Integer Age is at: 0x」 << hex << pInteger << endl; 

return 0; 
} 

書中說,輸出是其中年齡存儲在內存中的地址。

但是,這本書不談論這個:

*pInteger = &Age; 
pInteger = &Age; 

是什麼這兩個任務之間的區別?

+0

'&'符號與類型一起使用時,聲明一個引用。與變量一起使用時,返回變量的地址或位置。例如:'int&' - 聲明一個引用; 「&Age」 - 「Age」的返回位置。 –

回答

6

你似乎被這條線

int* pInteger = &Age; // pointer to an int, initialized to &Age 

這裏的*符號聲明pInteger爲指向int混淆。這是初始化(未分配)的年齡是允許的地址,因爲年齡是一個整數。

您可以鍵入

*pInteger = 45; 

和將被分配給整到pInteger點。

您也可以鍵入

int y = 35; 
pInteger = &y; 

這將被重新分配指針指向一個不同的地方。

2

int* pInteger = &Age;不是一個賦值,而是一個初始化。這裏,*是類型的一部分 - int*,而不是整數*pInteger,如下所示。

你問這兩個任務是:

*pInteger = &Age; 
pInteger = &Age; 

不同的是,第一個是非法的,第二個是確定。這是因爲&Age的類型爲int*,而*pInteger的類型爲int,因此將int*分配給int是非法的。但是,pInteger的類型爲int*,因此分配是確定的。

1

pInteger是int的指針,它是在第一種情況下初始化到的Age地址(假設你的意思int*pInteger = &Age;),和在第二種情況下分配

3

它可能會更容易些,如果你打破了這個

int* pInteger = &Age; 

分爲兩個步驟

​​

瞭解delares類型的指針變量爲int,然後

pInteger = &Age; 

將Age的地址賦給pInteger,所以pInteger現在指向一個特定的整數。

如果你寫

*pInteger = 95; 

你會分配給任何pInteger當前指向一個新的價值。

當你寫

int* pInteger = &Age; 

您聲明變量並給它一個初始值,所以這是不一樣的明顯相似

*pInteger = &Age; 

這是使用pInteger但不宣佈它所以在這裏你得到Age的地址,並且正在有效地試圖將它分配給pInteger指向的東西,給int分配一個地址並不是一件好事。

1

首先聲明和初始化類型的變量int*

 int*  pInteger =   &Age; 
//| var type | var name | | value of type "int*" | 

下一步,我們嘗試使用分配:

  pInteger  =   &Age; 
//| var of type "int*" | | value of type "int*" | 
     *pInteger  =   &Age; 
//| var of type "int" | | value of type "int*" | 

最後是不正確,直到我們投int*int(如果我們的目標是使用像整數值一樣的地址)。一元運算符解引用運算符*意味着我們需要位於指定地址處的東西。