2013-04-09 101 views
0

我剛開始學習C++,並且在C++入門中遇到了2個練習。這個練習中的1個我無法理解。C++入門練習

練習2.22 C++底漆
假設p是一個指向int,解釋下面的代碼:

if (p) //.... 
if (*p) //.... 

正如我在1個語句理解我們檢查指針p的條件是否其truefalse
在2聲明中,除了這次我們使用解除引用運算符
以外所有操作都是相同的如果我錯了,你能告訴我我的錯誤在哪裏嗎?

而且接下來的練習,這個練習我無法理解
練習2.23
鑑於指針p,你能確定是否p指向一個有效的對象?如果是這樣,怎麼樣?如果不是,爲什麼不呢?

我知道的事情是,當你的變量被初始化並且具有與指針相同的類型時,你可能知道你的指針指向了有效的對象。而且試圖訪問無效指針可能會導致代碼問題,並且編譯器螞蟻會發現此問題。
這個練習還有別的可以補充的嗎?或者我的猜測是錯誤的?
謝謝你的時間!

回答

1

假設

int *p = NULL; 

然後:

if (p) 

檢查P是否爲NULL與否和將返回false。

if (*p) 

檢查是否(*p) == 0,即通過p指向的整數爲0或沒有。

,如果你有

int *p; 

即沒有初始化它,然後p將指向隨機地址在你的記憶,並

if (p) 

將大部分時間迴歸真實的。和

if (*p) 

會給出未定義的行爲。

+0

附加一點澄清:通常,指針在它們持有對對象的引用之前被初始化爲「NULL」(=='0')。此外,工廠函數(實例化對象)通常在錯誤上返回NULL,而不是有效的指針。 – 2013-04-09 03:51:15

+0

謝謝。那幫我 – AlexGreat 2013-04-09 03:51:59

+0

@AlexGreat歡迎來到C++ :) – gongzhitaao 2013-04-09 03:57:09