C語言void NULL解析

2021-09-25 17:44:42 字數 994 閱讀 4773

void:

c語言屬於強型別語言。編譯器通過變數的資料型別給變數分配具體大小的記憶體空間,並提供變數的所屬型別的解析方法。因此c語言中所有的變數必須都要有明確的資料型別。

void型別的含義是:當前不確定型別,將來會指定具體型別。

void型別的乙個典型應用案例就是malloc函式,malloc向系統堆管理器申請一段記憶體給當前程式使用,申請到記憶體空間後由於malloc並不能預知這段記憶體空間將來是分配給什麼型別的變數來使用,無論定義成int */double */char *等都不合適,因此就將其定義成void *,表明當前型別不能確定,等到具體使用時再將(void *)強制型別轉換為程式需要的具體型別。例如:int *p = (int *)malloc(20);

null:

null不是c語言中的關鍵字,而是編譯器的乙個巨集定義:

#ifdef _cplusplus //c++環境下

#define null 0

#else

#define null (void *)0 //c語言環境下

#endif

null的本質是0,但當成乙個位址0x00000000來解析。

從指標角度來解析null:

int *p; 與 int *p = null; 的區別:第一種,p是定義在函式內的乙個區域性變數,由編譯器分配在棧上。由於棧是髒的,因此p的值是髒的,p所指向的位址是隨機的,p稱為野指標,這種情況下很可能誤傷其他正常執行的程式;第二種,將其初始化為null,實質是將p的指向繫結為0x0位址處。由於0位址在大部分cpu中是不能隨便訪問的區域,受作業系統的嚴密管控,不允許應用程式訪問。因此將p指向此處是安全的。一旦解引用p,程式就會觸發段錯誤,編譯器會報錯提示程式設計師。

程式設計良好習慣:一般比較乙個指標和null是否相等時,會寫成if(null == p),而不會寫成if(p == null)。因為一旦不小心把==寫成=,第一種情況下編譯器會報錯;而第二種情況下,程式意思完全變了,但編譯器不會報錯報警告。

c語言解析xml

根據導師的要求,要用c語言解析乙個xml檔案,用於對公升級檔案進行合法性判斷,進而對軟體進行公升級。看了一些源 發現他們主要使用樹型結構來實現對xml 的解析,由於能力有限吧,感覺很麻煩,可能占用記憶體也會很大,所以我苦苦思索了好久,決定使用遞迴的方法解析xml檔案,每當解析出相應的數值時,可以立即...

C語言歌詞解析

定義乙個結構體用來存放下面分離的時間戳和歌詞 struct liric liric 400 int main char b 300 file fp1 fopen 夢回還.lrc r if fp1 null printf error 提取文字文件放入結構體陣列中 for i 0 feof fp1 i ...

C語言指標解析

我們通常把指標變數叫做指標,準確的說,這樣的理解是錯誤的。首先我想在這裡明確一下指標與指標變數是兩個概念。指標變數 指標是一種具有特殊意義的整型數,指標不能存放在一般的整型變數中,必須存放在專門指標的變數中,這類變數就是指標變數。int i 10 int p i return 0 在這段 中 i 是...