2015-11-16 69 views
-1

我想知道下面的語句是無效的,初始化指針不給一個地址

int* p; 
*p = 3; 

但下面這句話是

int* p; int a; 
a = 9; 
p = &a; 
*p = 3; 

爲什麼我不能給* PA值演說之前一個地址,但可以在分配地址後給它。謝謝

+2

在爲變量賦值之前,您不能使用變量的值。這有什麼困惑嗎? –

回答

0

沒有被初始化爲指向一個地址,指針將包含一些垃圾地址,這是你試圖寫在第一個例子。爲了有效,指針引用您擁有的一些有效內存是非常重要的,這要求您將其設置爲一個地址。

2

指針只是一個特殊類型的變量,它將內存地址作爲其值保存。在初始化之前,它可能指向任何隨機存儲器地址。

解引用一個指針(使用*p = 3語法)是告訴計算機去通過p指向的存儲器地址,並存儲在該位置的值3。

所以很明顯,沒有有效的內存位置,這是有問題的。下面是通過分配獲取有效存儲器地址的一種可能的方式:

int *p = new int; 
*p = 3; 

第一行做兩兩件事:1)分配在堆上爲int存儲器,和2)指針p的值設置到地址的分配內存。

+0

謝謝,這是非常有益的,特別是新的int。 –

+0

儘管使用'std :: unique_ptr',但實際上並不使用'new'。 – GManNickG