我試圖確定檢查的指針是大於0的目的:檢查指針是否大於0?
void someFunction(int *src) {
int val = *src++;
if(val > 0) {
// Do something?
}
}
如果數據類型爲指針,不會指針始終的值是一個內存地址?做指針算術是否可以設置val = 0?
這是一個簡單的空指針檢查?
我試圖確定檢查的指針是大於0的目的:檢查指針是否大於0?
void someFunction(int *src) {
int val = *src++;
if(val > 0) {
// Do something?
}
}
如果數據類型爲指針,不會指針始終的值是一個內存地址?做指針算術是否可以設置val = 0?
這是一個簡單的空指針檢查?
這不檢查指針是否大於零;它將檢查指向的值是否大於零,並同時將指針前進一個。下面是一些等價代碼,可以幫助你理解:
void someFunction(int *src) {
int val = *src; // Dereferencing the pointer
src++; // Moving the pointer
if(val > 0) {
// Do something?
}
}
val
只是一個int
,而不是一個指針。
val
不是一個指針;它是一個int
,它的值是通過取消引用src
獲得的。
這不檢查指針,它檢查一個整數。 *
運算符取消引用指針,產生指針當前指向的值。例如,如果src
指向0
,則val
將爲0
,並且該if
語句的條件將爲false。
您不檢查指針是否大於0,您正在檢查指向的位置中保存的值是否大於0. src
本身就是一個地址,*src
是該地址的值。
就拿那個傳給你的麻煩就行了仔細看看:
int val = *src++;
你應該認識到,由於工作後綴遞增運算符,這樣我們就可以一分爲二該行:
int val = *src;
++src;
在這一點上,val
有一個值src
的副本指向在函數的開始;同時src
本身現在指向下一個內存位置。
此處沒有任何內容檢查指針src
是否爲空,其無效(或其他方式)與val
中存儲的值無關。