建議1 區分4中零值

2021-06-04 01:39:41 字數 1974 閱讀 3124

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...