2015-04-03 53 views
0
int** p = (int*)malloc(sizeof(int)); 
p = NULL; 
printf("%10d", p); 
printf("%10d", &p); 

然後我得到 0和某個地址號雙指針和重新分配空指針

但由於這是一個雙指針,我不應該有P的值作爲地址? 我如何在同一時間有兩個值?

至更具體地, 因爲p是第一指針 的地址,如果我有P = 32425,則意味着我已經指向的地址32425 但&運算符返回地址 的值從而p應該被& p 但它不是

是我的問題。也許我很困惑

回答

3

首先,請注意,malloc什麼都不做(因爲內存泄漏),因爲你用NULL覆蓋它。你也分配了錯誤的尺寸,你需要做p = (int **)malloc(sizeof(int *));。此外,使用%10d作爲指針不太正確 - 使用%p代替。

話雖這麼說:

第一printf將顯示一個空指針(可能表示爲0),因爲你剛分配到NULLp等的NULL值就是你看到的。

第二個printf將顯示p本身的地址。換句話說,一個int ***(一個三重指針)指向p。這不是NULL,當然,p必須在某處,因爲它是一個堆棧分配變量。

+0

thx! malloc(sizseof(int *))就像聲明指針變量一樣? – 2015-04-03 18:30:20

+1

@이종연,不,它爲指針變量指向的東西(恰好是另一個指針)分配空間。這與聲明指針變量本身是分開的。 – bdonlan 2015-04-04 08:48:18