代碼操作:邏輯不是指針
struct person *p = NULL;
printf("%d, %d\n", !p, !!p);
在上面的代碼中,!
操作符對指針,我知道!
作品與int
,但是當它與pointer
工作,會發生什麼?
指針在本質上被看作是int
,還是!
做了一個類型轉換?
我發現答案這裏提到的C99參考: www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
代碼操作:邏輯不是指針
struct person *p = NULL;
printf("%d, %d\n", !p, !!p);
在上面的代碼中,!
操作符對指針,我知道!
作品與int
,但是當它與pointer
工作,會發生什麼?
指針在本質上被看作是int
,還是!
做了一個類型轉換?
我發現答案這裏提到的C99參考: www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
從c99
標準,章6.5.3.3條第1款
一元+或操作數 - 者應當有算術類型; 〜運算符, 整型;的!運算符,標量類型。
和,從6.2.5,第21段,
運算類型和指針類型被統稱爲標量類型。
因此,人們可以直接使用pointer
類型與一元運算符!
。 !
正常評估。
也許值得一提,在pointer
使用的情況下,NULL
值是假比任何其他NULL
被認爲是真值。
無論如何,指針只是某個東西的地址,即數字。所以'!'操作員也會照常使用指針。
好的答案,順便檢查了c99文檔,發現chp應該是'6.5.3.3一元算術運算符' –
@EricWang明顯的錯字。 :-)謝謝指出。 –