欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 19180|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

C語(yǔ)言'\0'、'0'、' '、“0”、0的區(qū)別詳解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:244281 發(fā)表于 2018-1-20 12:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在一個(gè)微信公眾號(hào):AutoCodes  上面看到一篇推文,感覺(jué)整理的挺好
的,分享給大家!后面有一個(gè)問(wèn)題,可以一塊討論,數(shù)字0和字符0不是一
樣的吧,那數(shù)字有ASCII碼嗎?
原文如下:
【C語(yǔ)言】'\0'、'0'、' '、“0”、0的區(qū)別詳解
文章內(nèi)容部分整理自網(wǎng)絡(luò)!若有冒犯請(qǐng)指出,我們及時(shí)更正!
在計(jì)算機(jī)中,所有的數(shù)據(jù)在存儲(chǔ)和運(yùn)算時(shí)都要使用二進(jìn)制數(shù)表示(因?yàn)橛?jì)算機(jī)用高電平和低電平分別表示1和0),例如,像a、b、c、d這樣的52個(gè)字母(包括大寫(xiě))、以及0、1等數(shù)字符號(hào)還有一些常用的符號(hào)(例如*、#、@等)在計(jì)算機(jī)中存儲(chǔ)時(shí)也要使用二進(jìn)制數(shù)來(lái)表示,而具體用哪些二進(jìn)制數(shù)字表示哪個(gè)符號(hào),當(dāng)然每個(gè)人都可以約定自己的一套(這就叫編碼),而大家如果要想互相通信而不造成混亂,那么大家就必須使用相同的編碼規(guī)則,于是美國(guó)有關(guān)的標(biāo)準(zhǔn)化組織就出臺(tái)了ASCII編碼,統(tǒng)一規(guī)定了上述常用符號(hào)用哪些二進(jìn)制數(shù)來(lái)表示。
有關(guān)字符集和編碼的內(nèi)容繼續(xù)在微信公眾號(hào):AutoCodes中推出。
需要明白的是,這里的映射關(guān)系式“字符” <-->"數(shù)字(編碼)"。
第一部分:區(qū)別第一:'\0'
是字符,其ASCII碼為0,內(nèi)存中存放表示:0000 0000。
'\0'是一個(gè)ASCII控制字符,是轉(zhuǎn)義字符,代表空字符。作為字符串結(jié)尾字符。字符'\0'可以直接用ASCII碼0表示,0不管是幾進(jìn)制,都是0(十進(jìn)制),也就是0x00(十六進(jìn)制)。
char c = '\0';
char c = 0;   //ASCII碼為0的字符賦給字符變量c
這兩個(gè)是一樣的。當(dāng)你打印的時(shí)候看你以什么形式去打印,如果是 %d,那會(huì)打印出0,如果是 %c 打印出一個(gè)空格,不是輸出到屏幕上'\0'。'\0'與 0 本質(zhì)上其實(shí)是一樣的,一個(gè)是ASCII碼,一個(gè)是該ASCII碼對(duì)應(yīng)的字符。字符串結(jié)束符 '\0' 的 ASCII 值正好是 0。所以用0判斷和用 '\0' 判斷,結(jié)果一樣(在內(nèi)存中存放一樣)。
'\0'就表示將字符'0'轉(zhuǎn)義,系統(tǒng)遇到'\0'時(shí)輸出一個(gè)空格,從而表示ASCII碼為0的字符(字符串結(jié)束符),而數(shù)值0和這個(gè)是一個(gè)意思,
‘\0’是字符數(shù)組或者字符串結(jié)束標(biāo)志,系統(tǒng)在引用字符數(shù)組或者字符串的時(shí)候遇到‘\0’就會(huì)結(jié)束,在進(jìn)行字符數(shù)組初始化的時(shí)候,這個(gè)‘\0’是自動(dòng)加上去的。而‘0’可以作為字符數(shù)組的一個(gè)元素。
第二:'0'
'0'是數(shù)字字符,其ASCII碼為48,也就是0x30,內(nèi)存中存放表示:0011 0000
第三:' '
' '空格是一個(gè)字符,其ASCII碼為32,內(nèi)存中存放表示:0011 0000
比如   abcd (空格)cdefg;
存入數(shù)組時(shí),空格作為一個(gè)字符占有一個(gè)字節(jié)的空間,我們可以把它看作一個(gè)字符去處理。而 "\0" 則是這個(gè)字符串的結(jié)束標(biāo)識(shí)符,也占有一個(gè)字節(jié)的空間,表示字符串結(jié)束!
第四:"0"
"0"是字符串。
“0”代表字符串“0”,即這個(gè)字符串里只包含一個(gè)字符'0'(當(dāng)然字符串結(jié)尾默認(rèn)再加一個(gè)'\0')
第五:0
0是個(gè)整數(shù),內(nèi)存中表示為0000 0000,0就代表阿拉伯?dāng)?shù)字0
在邏輯運(yùn)算值方面,0和'0'(ascii碼值為48)的主要區(qū)別,比如 !0 =1  !'0'=0;
字符0的ASCII碼實(shí)際上是48,C語(yǔ)言中字符0 只占一個(gè)字節(jié)(Byte),也就是內(nèi)存中存放的是 01001000 (其中每一個(gè)0或1表示一個(gè)bit位)
而整數(shù)0, 它在內(nèi)存中的表示全是0,C語(yǔ)言中一個(gè)整數(shù)的占4個(gè)字節(jié),整數(shù)0在內(nèi)存中的表示為: 00000000 00000000 00000000 00000000 .
如下:
    char c = '0';  //字符0
    int a = 0;     //整數(shù)0
    printf("%c, %d\n", c, a); //0,0
    printf("%d\n", c); //48   用整數(shù)形式打印字符,實(shí)際是打印c在內(nèi)存中的值。
    printf("%d\n", (c+a)); //48
    printf("%c\n", (char)(c+a)); //0
輸出的結(jié)果:
0,0
48
48
0
從上面你就能看出字符0和整數(shù)0的區(qū)別了。
第二部分:內(nèi)容擴(kuò)展
附:如果用scanf來(lái)接收字符串的話(huà),字符串中不能含有空格,否則將以空格作為串的結(jié)束符。如果你鍵入得是hello world 那么實(shí)際上scanf只能獲取hello 這個(gè)單詞。所以要接收空格的話(huà)可以用gets()這個(gè)函數(shù)。gets(str)是讀入一串以回車(chē)結(jié)束的字符,順序存入到以str為首地址的內(nèi)存單元中,最后寫(xiě)入字符串結(jié)束標(biāo)志 “\0 “,
同樣在輸出字符串時(shí)要用puts(),輸出時(shí)直到遇到 \0 為止,最后輸出一個(gè)換行符。
第三部分:?jiǎn)栴}
那么,C語(yǔ)言中既然'\0'與空格‘ ’是不一樣的,那為什么在字符串問(wèn)題中,scanf中還不能讀入空格?例如字符串"hello world",用scanf以%s格式輸入,只能輸出"hello",字符串是以‘\0’作為結(jié)尾,而‘ ’!='\0'。為什么呢?
這不是說(shuō)明空格與\0等價(jià),而是由于C語(yǔ)言的緩沖機(jī)制,scanf讀取數(shù)據(jù)不是從鍵盤(pán)直接讀取,因?yàn)殒I盤(pán)是字符型輸入設(shè)備,且它是中斷方式來(lái)被操作系統(tǒng)控制,所以這些IO設(shè)備存取速率及其低下,而內(nèi)存是塊設(shè)備,讀取速度非常快,因此引入緩沖區(qū)機(jī)制來(lái)緩沖IO設(shè)備與內(nèi)存的數(shù)據(jù)交換,scanf也是從緩沖區(qū)地區(qū),而scanf函數(shù)是把空格作為緩沖區(qū)數(shù)據(jù)的分隔符,每遇到一個(gè)空格,則表示當(dāng)前一段數(shù)據(jù)為可用數(shù)據(jù),被scanf讀取,而不是空格表示字符結(jié)束而被讀入。
第四部分:遺留問(wèn)題
在我們平臺(tái)上,有讀者提出這樣一個(gè)問(wèn)題:在查找網(wǎng)上資料的過(guò)程中,看到有這么一個(gè)說(shuō)法“數(shù)字的ASCII碼”,數(shù)字有ASCCII碼嗎?
讀者認(rèn)為字符'0'、'1'......'9'有對(duì)應(yīng)的ASCII碼,而數(shù)字0、1......9是沒(méi)有ASCII碼的。對(duì)于這個(gè)問(wèn)題,給大家一塊討論~

評(píng)分

參與人數(shù) 3黑幣 +65 收起 理由
qjzyx + 5 贊一個(gè)!
白鶴859 + 10 共享資料的黑幣獎(jiǎng)勵(lì)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:248394 發(fā)表于 2018-1-25 13:57 | 只看該作者
有點(diǎn)繞...
回復(fù)

使用道具 舉報(bào)

板凳
ID:266116 發(fā)表于 2018-1-25 14:59 | 只看該作者
謝謝分享!
回復(fù)

使用道具 舉報(bào)

地板
ID:981034 發(fā)表于 2021-11-26 15:20 | 只看該作者
有點(diǎn)暈
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表