2017-02-08 91 views
0

爲什麼值的NULL指針的地址不同 我有一個示例程序下面我試圖理解空指針的概念。這裏& q打印不同的地址,'q'給出0這是什麼原因。在C++中的NULL指針

#include <iostream> 
using namespace std; 
int main() 
{ 

int *q=NULL; 

cout <<"adress of pointer q\n" << q<<endl; 
cout <<"adress with apersand pointer q\n" << &q<<endl; 

} 

回答

1

NULL指針是一個常數,在幾個標準庫(包括iostream)中定義的值爲零。

在大多數操作系統中,程序不允許訪問地址0處的內存,因爲該內存由操作系統保留。但是,內存地址0具有特殊意義;它表示該指針不打算指向可訪問的內存位置。但是按照慣例,如果一個指針包含null(零)值,則它被假定爲無效。

引用不是指針。

一個引用應該被初始化爲引用一個有效的對象或者一個 函數。 [注意:特別是, 明確定義的程序中不存在空引用,因爲創建此類引用 的唯一方法是將其綁定到通過取消引用空指針獲得的「對象」,從而導致未定義行爲。如9.6所述, 引用不能直接綁定到位域。 ]

空指針當然不會指向「有效的對象或函數」,並且標準委員會中沒有引入空引用的願望。

+0

&q和q不一樣的原因是什麼?如果地址是0,那麼爲什麼與&我得到一個memeory地址。上面的 – Step

+0

我解釋了爲什麼nullpointer q打印值爲0.地址不爲零,所以&q打印內存位置。 – Aryan

0

你已經用NULL初始化q,這就是爲什麼q給出0. 然而,變量q存儲在某處,即地址& q給出。