1. 程式人生 > >0,‘0’,‘\0’,null的區別

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