0在c/c++語言中絕對是乙個多面手,它扮演著多樣的角色,擁有著多種面孔。總結起來包括以下幾種角色:整型0、空指標null、字串結束標誌 '\0'、邏輯false/false,不同的角色適用於不同的情形,下面我們按照上述順序一一介紹。
整型0這是我們最熟悉的乙個角色。作為乙個int型別,整型0佔據32位的空間,其二進位制表示為:
00000000 00000000 00000000 00000000
它的使用方式最為簡單直接,未經修飾,如下所示:
int nnum = 0; // 賦值 if( nnum == 0 ) // 比較
空指標null
null是乙個表示空指標常量的巨集,在c/c++標準中有如下闡述:
在檔案、、、、、或者中定義的null巨集,在國際標準中被認為是c++空指標常量。
指標與int型別所佔空間是一樣的,都是32位。那麼,空指標null與0又有什麼區別呢?還是讓我們看一下windef.h中null的定義吧:
#ifndef null #ifdef __cplusplus #define null 0 #else #define null ((void *)0) #endif #endif
通過定義我們可以看出,它們之間其實是沒有太大的區別,只不過在c語言中定義null時會進行一次強制轉型。我想之所以創造出null,大概是為了增強**的可讀性,但這只是我的臆測,無從考究。
需要注意的是,這裡的0與整型的0還是存在區別的。例如,int* pvalue = 0;是合法的,而int* pvalue = 1;則是不合法的。這是因為0可以用來表示位址,但常數1絕對不行。
float* pnum = null; // 賦值 if( pnum == null ) // 比較
字串結束標誌'\0'
'\0'與上述兩種情形有所不同,它是乙個字元。作為字元,它僅僅佔8位,其二進位制表示為:
00000000
因為字元型別中並沒有與0000 0000對應的字元,所以就創造出了這麼乙個特殊字元。(對於類似'\0'這樣的特殊字元,我們稱之為轉義字元。)在c/c++中,'\0'被作為字串結束標誌來使用,具有唯一性,與'0'是有區別的。
作為字串結束符,0的使用有些特殊。不必顯式地為字串賦值,但是必須明確字串的大小。例如,在下面的**中,「hello c/c++」只有11個字元,卻要分配12個字元的空間。
char shello[12] = ; // 賦值 if( shello[11] == '\0' ) // 比較
邏輯false/false
雖然將false/false放在了一起,但是你必須清楚false和false之間不只是大小寫這麼簡單的差別。false/true是標準c++語言裡新增的關鍵字,而false/true是通過#define定義的巨集,用來解決程式在c與c++環境中的差異。以下是false/true在windef.h中的定義:
#ifndef false #define false 0 #endif #ifndef true #define true 1 #endif
換言之,false/true是int型別,而false/true是bool型別,兩者是不一樣的,只不過c++幫我們完成了相關的隱式轉換,以至於我們在使用中沒有任何感覺。bool在c++裡占用的是1個位元組,所以false也只占用1個位元組。
其二進位制表示如下:
false -> 0 false -> 00000000 00000000 00000000 00000000
如果不夠細心,0的多重性可能會讓程式產生一些難以發現的bug,比如:
// 把psrc指向的源字串複製到pdes指向的記憶體塊 while(psrc)
正常情況下,當psrc指向的字元為字串結束符'\0'時,while迴圈終止;但不幸的是,這裡的條件寫錯了,while終止條件變成了psrc指向位址0。結果while迴圈寫入到記憶體中了,直至程式崩潰。
正確的寫法應該是:
// 把psrc指向的源字串複製到pdes指向的記憶體塊 while(*psrc)
建議1 區分0的4中面孔
0在c c 語言中有4中形態 整形0,空指標null,字串結束標記 0 和邏輯false false。這四種都是有差異的。它們所佔的記憶體空間 整形的0佔32位的空間,指標和整形所佔的空間是一樣的。字元佔空間8位,而邏輯符不太一樣,false是int型別,佔32位,而false是bool型別,佔1位...
五點區分CDP與DMP
dmp主要利用第三方資料 即第三方資料 商的資料和企業 的匿名標籤資料 選出部分匿名的cookie投放廣告。所以dmp提供的服務是把企業 的匿名標籤資料和資料 商的資料相結合,以便企業能在做精準營銷前預先構建目標客群。即dmp提供的是資料訪問許可權而不是乙個營銷執行工具或整合套件,它只能對預設的受眾...
12 4 區分jQuery物件與DOM物件
12.4 如何區分jquery物件與dom物件 dom物件 1.通過getelementby 查詢出來的為dom物件 2 通過getelementsbyname 查詢出來的標籤物件為dom物件 3.通過getelementtagname 查詢出來的標籤物件為dom物件 4.通過createeleme...