c語言中的各種「零」

2021-08-14 23:59:56 字數 1761 閱讀 8970

在c語言中,存在各種各樣的「零」。例如:0,『0』,null等。下面我們就具體介紹一下這些」零「:

零值意義備註0

整型資料的0

0.0實型資料的0

null

指標型資料的0

記憶體的0位址,用於初始化暫時不用的指標。或是標識已經被釋放堆記憶體的指標。

『\0』

轉義字元型(ascii值為0)

非可列印字元,用於標識字串結束標記。

『0』字元型(ascii值為48)

可列印字元,用於列印字元0

「0」字串型

包含兩個ascii值40和0

在上述這些零中,其他的都好理解。令人困惑的恐怕就是0與null的關係了吧!下面,我們就主要來介紹以下這兩個令人迷惑的東西。

首先我們先用一段c**來測試兩者之間的關係:

#include int main()

在linux下,使用gdb單步除錯,結果如下:

可以看出:在c語言中,null和0的值都是一樣的,但是為了目的和用途及容易識別的原因,null用於指標和物件,0用於數值。

注意:在不同的系統中,null並非總是和0等同,null僅僅代表空值,也就是指向乙個不被使用的位址,在大多數系統中,都將0作為不被使用的位址,所以就有了類似這樣的巨集定義:#define null 0;

null在stdio.h中定義:

#if !defined(null) && defined(__needs_null)

#ifdef __cplusplus

#define null 0

#else

#define null ((void *)0)

#endif

#endif

從上述**中可以看出:在c++中將null定義為0,而在c語言中,卻將null定義為(void *)0。.這是為什麼呢?

答:在c中,null擴充套件為乙個實現定義的「空指標常量」。空指標常量可以是值為0的整數常量表示式,也可以是乙個表示式void*。所以c實現可以定義null為0或者((void*)0)。

int* p = 0;

int* p= (void *)0;

在c語言中,這兩者都是合法的

在c ++中,空指標常量的規則是不同的。在c++中,空指標常量是整數型別的整數常量表示式右值,求值為零。在c ++中,int* p= (void* )0這是不合法的,因為不能隱式轉換void*為另一種指標型別。

int* p = 0;    //合法

int* p = (void* )0; //不合法

由於這一點以及隨之而來的混淆,自從c ++ 11以來,有乙個關鍵字nullptr代表乙個空指標:

int* p = nullptr;
這樣的話就會清晰很多。例如,假設存在兩個不同功能:

int test(int x);

int test(int* x);

當我們想使用第二個功能時,若使用null,即:test(null)相當於test(0),此時就會呼叫第乙個功能,和我們的需求相反,但是,使用nullptr時,即:test(nullptr);它會呼叫test(int*)按預期呼叫函式。

C語言中的各種進製轉換

一 正數 1.十 二 2.二 十 3.十 八 4.八 十 6.十六 十 二 負數 正文 一 正數 在高速發展的現代社會,計算機浩浩蕩蕩地成為了人們生活中不可缺少的一部分,幫助人們解決通訊,聯絡,互動等各方面的問題。今天我就給大家講講與計算機有關的 進製轉換 問題。我們以 25.625 十 為例講解一...

C語言中各種printf輸出型別

d整型輸出,ld長整型輸出,o以八進位制數形式輸出整數,x以十六進製制數形式輸出整數,u以十進位制數輸出unsigned型資料 無符號數 c用來輸出乙個字元,s用來輸出乙個字串,f用來輸出實數,以小數形式輸出,備註 浮點數是不能定義如的精度的,所以 6.2f 這種寫法是 錯誤的 e以指數形式輸出實數...

C語言中各種資料型別的大小

c語言 1.幾條規則 1 char型別一般是8bit,但ansi c裡沒有硬性規定其長度,某些嵌入式編譯器可能是16bit 2 short和long型別的長度不相同 3 int型別通常同具體機器的物理字長相同 4 short通常是16bits,int通常是16bits or 32bits每種編譯器可...