2010-02-08 111 views
4

我是一名編程學生,希望能更好地理解指針,我學到的一件事就是您可以將指針設置爲NULL。我的問題是,這兩種說法有什麼區別?他們每個人什麼時候會返回真/假?這兩個陳述之間的區別? - C++

if (some_ptr == NULL) 

if (*some_ptr == NULL) 

謝謝!

回答

9

第一種方法是將變量的地址與空值進行比較,第二種方法將指針取消引用,獲取值並將其與空值進行比較。

+0

什麼變量的地址?沒有變量具有空地址。 – 2011-06-05 19:45:23

3

第一條語句引用some_ptr指向的實際地址。如果它是NULL(由define NULL表示的值),則爲true,否則爲false。

後面的語句引用指針指向的地址處的內容。因此,如果您將some_ptr指向一個整數,並且該整數恰好與您的空定義相同,則第二個條件的計算結果爲true。

1

首先是您將指針本身與NULL進行比較,這似乎是可取的。

第二個是你首先解引用指針來獲取與NULL進行比較的值,就像你根據你的變量名將一個int值與0進行比較。

0

例如:int * x;這裏如果你喜歡檢查x是否指向NULL,那麼我們使用第一條語句。使用相同的int * x,如果使用第二條語句,那麼您試圖取消引用指針並檢查x指向的值。因爲C中的NULL爲0,C++會檢查x指向的值0。

編輯:同樣用第二條語句,如果x指向NULL,則引用NULL指針會導致UNIX上的核心刪除。

1

第一個說:
some_ptr NULL?

第二個說:
不管some_ptr是指向 NULL?