C語言特殊符號(hào)的補(bǔ)充理解
續(xù)接符
反斜杠"",他有兩種最常見的功能,一就是續(xù)航功能,二就是我們提到反斜杠就會(huì)很敏感的轉(zhuǎn)義字符。
if("1==a&&2==b&&3==c) { printf("hello\n"); }
有以上的代碼我們可以等價(jià)于
if("1==a&&\ 2==b&&\ 3==c) { printf("hello\n"); }
這里反斜線就起到了一個(gè)連接上下兩行的代碼,在咱看來是獨(dú)立的三行但在編譯器眼里這仨貨就是在同一排。設(shè)想一下當(dāng)我的條件足夠多時(shí)為了提高代碼可讀性,我們最好不擠在一排看著又臭又長(zhǎng),分占會(huì)顯得更加清新,所在大的工程文件里面我們經(jīng)常會(huì)使用續(xù)航符號(hào)來操作我們代碼的美觀。
注意:續(xù)航符在使用時(shí)要注意空格,續(xù)航符之前的空格是不存在影響的,但如果放在后面就不能編譯。
旋轉(zhuǎn)光標(biāo)
由我們系統(tǒng)方面的知識(shí)和C語言關(guān)鍵字基礎(chǔ),我們就能搞出來一個(gè)我們常見的旋轉(zhuǎn)光標(biāo):
int main() { int a = 0; const char *spot = "|/-\\"; while(1) { printf("[%c]\n",spot[a]); a++; Sleep(300); } }
效果如下:
單雙引號(hào)潛規(guī)則
char a= 'abc'; printf("%c\n",a);
我們來看看這個(gè)代碼的結(jié)果:
一個(gè)問題,我們腦海里學(xué)習(xí)的知識(shí)告訴我們char類型是一個(gè)字符,但上面代碼不僅不報(bào)錯(cuò)還能完完全全打印出來,我把內(nèi)容換成 ‘abcd’ 依然能打印出一個(gè) d ,再加一個(gè) e 時(shí)就會(huì)開始報(bào)錯(cuò)了,我們就針對(duì)這個(gè)打印 ‘abc’ 的現(xiàn)象來看看
我們直接對(duì)比一下他的字符長(zhǎng)度:
擦嘞,為啥 ‘1’ 會(huì)是4個(gè)字節(jié)大?。科鋵?shí)在C99中,這里的 a 叫做整型字符常量,本質(zhì)上是被編譯器看作int類型,所以其實(shí)就是在發(fā)生著一個(gè)截?cái)喱F(xiàn)象,我們對(duì) char 類型的認(rèn)知并沒有毛病,只是這里一直是在將4個(gè)字節(jié)的數(shù)據(jù)保存進(jìn)一個(gè) char 類型里面。
當(dāng)然,這種認(rèn)知也只是存在與C語言里,在C艸中仍然是被解釋成一個(gè)字節(jié),這也能解釋為什么咱四個(gè)字節(jié)以內(nèi)都能跑。
短路
很簡(jiǎn)單,說的就是一個(gè)邏輯與 (&&),含義就是一個(gè)條件不通過就不需要再看后續(xù)的條件的情況就是短路。
ASCII碼剛需
為什么咱計(jì)算機(jī)要搞這么多花里胡哨的符號(hào)呢??jī)?nèi)存里存的都是二進(jìn)制數(shù)據(jù),即0和1的一串序列,這時(shí)所謂的計(jì)算機(jī)語言,但作為一個(gè)person來講,咱最擅長(zhǎng)的不是看0和1,是我們能直觀理解的語句。
我們的計(jì)算器程序,在計(jì)算結(jié)果后如果返回的不是十進(jìn)制數(shù)而是一個(gè)二進(jìn)制序列是對(duì)我們極為不友好的,特別是不熟悉二進(jìn)制的普通用戶。所以程序會(huì)存在一個(gè)映射,這個(gè)映射機(jī)制就是給一個(gè)二進(jìn)制序列安排一個(gè)人為設(shè)計(jì)的符號(hào)或圖形,比如我屏幕上一個(gè)“1234”,在我們眼中它是一個(gè)整型1234,但在計(jì)算機(jī)眼里它就是四個(gè)字符。
所以為什么我們手機(jī)啥的能更換語言系統(tǒng),英文,簡(jiǎn)體中文,繁體中文……,其本質(zhì)原理就是改了一張映射表。
以上就是C語言特殊符號(hào)的補(bǔ)充理解的詳細(xì)內(nèi)容,更多關(guān)于C語言特殊符號(hào)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Linux下g++編譯與使用靜態(tài)庫和動(dòng)態(tài)庫的方法
下面小編就為大家?guī)硪黄狶inux下g++編譯與使用靜態(tài)庫和動(dòng)態(tài)庫的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05C++實(shí)現(xiàn)LeetCode(12.整數(shù)轉(zhuǎn)化成羅馬數(shù)字)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(12.整數(shù)轉(zhuǎn)化成羅馬數(shù)字),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07c語言之char*和unsigned?char*的區(qū)別及說明
這篇文章主要介紹了c語言之char*和unsigned?char*的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08C++ virtual destructor虛擬析構(gòu)函數(shù)
C++中基類采用virtual虛析構(gòu)函數(shù)是為了防止內(nèi)存泄漏。具體地說,如果派生類中申請(qǐng)了內(nèi)存空間,并在其析構(gòu)函數(shù)中對(duì)這些內(nèi)存空間進(jìn)行釋放,今天通過本文給大家介紹C++ virtual destructor虛擬析構(gòu)函數(shù)的相關(guān)知識(shí),感興趣的朋友一起看看吧2021-05-05C++編譯報(bào)錯(cuò):||error: ld returned 1 exit 
這篇文章主要介紹了C++編譯報(bào)錯(cuò):||error: ld returned 1 exit status|的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01