2012-03-07 143 views
0

我試圖確定檢查的指針是大於0的目的:檢查指針是否大於0?

void someFunction(int *src) { 
    int val = *src++; 
    if(val > 0) { 
     // Do something? 
    } 
} 

如果數據類型爲指針,不會指針始終的值是一個內存地址?做指針算術是否可以設置val = 0?

這是一個簡單的空指針檢查?

回答

4

這不檢查指針是否大於零;它將檢查指向的值是否大於零,並同時將指針前進一個。下面是一些等價代碼,可以幫助你理解:

void someFunction(int *src) { 
    int val = *src; // Dereferencing the pointer 
    src++;   // Moving the pointer 

    if(val > 0) { 
     // Do something? 
    } 
} 

val只是一個int,而不是一個指針。

4

val不是一個指針;它是一個int,它的值是通過取消引用src獲得的。

3

這不檢查指針,它檢查一個整數。 *運算符取消引用指針,產生指針當前指向的值。例如,如果src指向0,則val將爲0,並且該if語句的條件將爲false。

4

您不檢查指針是否大於0,您正在檢查指向的位置中保存的值是否大於0. src本身就是一個地址,*src是該地址的值。

0

就拿那個傳給你的麻煩就行了仔細看看:

int val = *src++; 

你應該認識到,由於工作後綴遞增運算符,這樣我們就可以一分爲二該行:

int val = *src; 
++src; 

在這一點上,val有一個值src的副本指向在函數的開始;同時src本身現在指向下一個內存位置。

此處沒有任何內容檢查指針src是否爲空,其無效(或其他方式)與val中存儲的值無關。