0,‘0’,‘\0’,null的區別
如題,在程式中經常遇到NULL,和'\0',常常疑惑它們是什麼關係,其實它們的值是一樣的,只不過表現的形式不一樣:
1、NULL; NULL 即空指標,在C和C++中的形式不一樣,msdn上有如下的內容那個:
#if !defined(NULL)&&defined(__NEEDS_NULL)
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
NULL 在c中用(void*)0表示,在c++中用0表示。
2、'\0':'\0'表示字串結束,它在ASCII中的值為0(數值0,非字元‘0’)
所以在數值上NULL,'\0',0是一樣的,都是0,但'0'就不同了,在ASCII碼中編碼為48,所以字元0和上述三個值不同。
在記憶體中NULL 和'\0' 和'0'都是一個8位的char型別,NULL 和'\0' 值一樣,都是0,以數字方式讀取就是0,以字串讀取時就是'\0'或者null(和編譯器有關),而‘0’在記憶體儲存著48,以字元讀取就是'0',以數字讀取就是48,至於0,可能是char ,int ,float,double等型別,但是值和NULL和'\0'一樣,都是0
printf("%d",'0');==>48
printf("%c",'0');==>0
printf("%c",0);==>空(即NULL)
printf("%d",0);==>0
那麼0+'0',0+'\0'分別是什麼呢?
printf("%c",0+'\0');==>空(NULL) 先轉換成int,然後ASCII編碼相加為0,%c輸出,轉換成char,所以輸出NULL
printf("%d",0+'\0');==>0 先轉換成int,然後ASCII編碼相加為0,%d輸出,不用轉換,輸出數字0
printf("%c",0+'0');==>0
printf("%d",0+'0');==>48