c语言NULL和0区别
轉(zhuǎn)載自:http://www.cnblogs.com/youxin/archive/2012/03/27/2420023.html
先看下面一段代碼輸出什么:
#include<stdo.h> int main() {int *p=NULL;printf("%s",p);}
輸出(null) ,單步調(diào)試可以看出執(zhí)行int *p=NULL,p的值為0x00000000,可以看出,NULL在實(shí)際底層調(diào)用中就是0,
在C語(yǔ)言中,
NULL和0的值都是一樣的,但是為了目的和用途及容易識(shí)別的原因,NULL用于指針和對(duì)象,0用于數(shù)值
對(duì)于字符串的結(jié)尾,使用'\0',它的值也是0,但是讓人一看就知道這是字符串的結(jié)尾,不是指針,也不是普通的數(shù)值
在不同的系統(tǒng)中,
NULL并非總是和0等同,NULL僅僅代表空值,也就是指向一個(gè)不被使用的地址,在大多數(shù)系統(tǒng)中,都將0作為不被使用的地址,所以就有了類似這樣的定義
#define NULL 0
但并非總是如此,也有些系統(tǒng)不將0地址作為NULL,而是用其他的地址,所以說(shuō),千萬(wàn)別將NULL和0等價(jià)起來(lái),特別是在一些跨平臺(tái)的代碼中,這更是將給你帶來(lái)災(zāi)難。
看下面解釋:
問(wèn) 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++中字符串的結(jié)尾標(biāo)志,存儲(chǔ)在字符串的結(jié)尾。比如char cha[5]表示可以放5個(gè)字符的字符串,由于c/c++中規(guī)定字符串的結(jié)尾標(biāo)志為'\0',它雖然不計(jì)入串長(zhǎng),但要占內(nèi)存空間,而一個(gè)漢字一般用兩個(gè)字節(jié)表示,且c/c++中如一個(gè)數(shù)組cha[5],有5個(gè)變量,分別是 cha[0] , cha[1] , cha[2] , cha[3] , cha[4] , 所以cha[5]可以放5個(gè)字母或者放2個(gè)漢字(1個(gè)漢字占2個(gè)字節(jié),1個(gè)字母占一個(gè)字節(jié)),cha[5]占5個(gè)字節(jié)內(nèi)存空間.
例如:
char str[5];str[0]='a';str[1]='b';str[2]='c';str[3]='d';//str[4]='\0'; //abcd str[4]='e'; /*這樣輸出就是abcde和一堆亂碼,甚至跳出系統(tǒng)錯(cuò)誤,因?yàn)闆](méi)有字符串結(jié)尾符*/printf("%s",str);總結(jié)
以上是生活随笔為你收集整理的c语言NULL和0区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 40、Power Query-Text.
- 下一篇: 41、Power Query-Text.