C語言中0 0 0 NULL以及型別轉化

2022-09-24 17:12:15 字數 1101 閱讀 4830

0 '\0' null都是三種0值,它們在數字上是完全一樣的,而且在記憶體中存的都是二進位制0。

所以,它們的值是一樣的,只不過表現的形式不一樣,也就是它們的型別是不同的:

0在整形中表示數字0,在字元中'0'表示乙個字元它的ascii碼值為48,

'\0'是乙個字元,表示字串結束,在ascii中的值為0

null 即空指標,它表示乙個指標指向位址為0的空間,可以看到這裡的0被強制轉化為void*指標,這也就意味著而null可以賦值給任何型別的指標:

對於不同的型別,如果使用運算子(比如=等運算子)運算的話,會進行隱式型別轉化,對於一些型別檢查嚴格的編譯器可能會報錯:

#include

int main()

真實的型別轉化:改變記憶體中的資料

不改變記憶體的型別轉化:不改變記憶體中的資料,只改變對應的型別

舉個例子:比如把字串"12345"轉化成整形數字12345,它們的記憶體大小和內容都發生了改變,字串"12345"的記憶體大小為6位元組,每個位元組儲存的是單個字元的ascii碼值,而整形數www.cppcns.com字12345則為4位元組,記憶體中儲存的是數字12345的二進位制補碼。

如果www.cppcns.com要實現這種轉化,則要使用對於的函式,在這裡可以自己實現乙個:

#include

intwww.cppcns.com my_atoi(char* str)

else if ('+' == str[0])//字串第乙個字元為'+',則不改變flag

else//字串不加符號,預設為正

while (str[i] >= '0' && str[i] <= '9')

return flag * value;

}int main(void)

而對於不改變記憶體的型別轉化,則不會改變其記憶體空間中儲存的值,只是改變資料型別:

對於c語言強制型別轉換時,會有兩種方式:

#include

#include

#include

#include

void split(char* str, double* position)

}int main()

return 0;

}

筆記14 C語言中的NULL

一.null不是c語言關鍵字,本質上是乙個巨集定義 二.null的標準定義 ifdef cplusplus define null 0 else define null void 0 對應c語言情況 endif解釋 c 的編譯環境中,編譯器預先定義了乙個巨集 cplusplus,程式中可以用條件編譯...

c語言中static型別

靜態變數都儲存與靜態儲存區中。1.靜態區域性變數 靜態區域性變數屬於靜態儲存方式,它具有以下特點 1 靜態區域性變數在函式內定義 它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式內使用該變數。退出該函式後,儘管該變數還繼續存在,但不能使用它。2 允許對構造類靜態區域性量賦...

C語言中列舉型別

列舉變數的建立 方法一 enum weekday 宣告了乙個列舉型別enum weekday enum weekday workday,weekend 用上面申明的列舉型別定義列舉變數 workday,weekend 方法二 不宣告有名字的列舉型別,直接定義列舉變數 enum workday,wee...