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