c語言NULL和0區別
先看下面一段程式碼輸出什麼:
#include<stdo.h>
int main() { int *p=NULL; printf("%s",p); }
輸出(null) ,單步除錯可以看出執行int *p=NULL,p的值為0x00000000,可以看出,NULL在實際底層呼叫中就是0,
在C語言中,
NULL和0的值都是一樣的,但是為了目的和用途及容易識別的原因,NULL用於指標和物件,0用於數值
對於字串的結尾,使用'\0',它的值也是0,但是讓人一看就知道這是字串的結尾,不是指標,也不是普通的數值
在不同的系統中,
NULL並非總是和0等同,NULL僅僅代表空值,也就是指向一個不被使用的地址,在大多數系統中,都將0作為不被使用的地址,所以就有了類似這樣的定義
#define NULL 0
但並非總是如此,也有些系統不將0地址作為NULL,而是用其他的地址,所以說,千萬別將NULL和0等價起來,特別是在一些跨平臺的程式碼中,這更是將給你帶來災難。
看下面解釋:
問 0 '0' '\0' "\0"
To me, when doing C/C++:
0 would digit zero, that is, a numerical value.
'0' could be the character capital oh or the character zero. For example: char word[10] = "Oxford"; char number[10] = "01234";
Depending on typeface used 'O' may look exactly like '0' making it difficult to tell them apart out of context.
'\0' is the null character used to terminate strings in C/C++.
"\0" is an empty string.
百度百科解釋;
\0是C++中字串的結尾標誌,儲存在字串的結尾。比如char cha[5]表示可以放5個字元的字串,由於c/c++中規定字串的結尾標誌為'\0',它雖然不計入串長,但要佔記憶體空間,而一個漢字一般用兩個位元組表示,且c/c++中如一個
例如:
char str[5]; str[0]='a'; str[1]='b'; str[2]='c'; str[3]='d'; //str[4]='\0'; //abcd str[4]='e'; /*這樣輸出就是abcde和一堆亂碼,甚至跳出系統錯誤,因為沒有字串結尾符*/ printf("%s",str);