版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C語(yǔ)言全面細(xì)致精講關(guān)鍵字的使用目錄1、switch深入理解2、如何正確的使用case3、循環(huán)語(yǔ)句whilefordowhile深度講解4、continue的作用是什么5、goto真的沒(méi)人用了嗎6、void到底是何方妖怪
1、switch深入理解
學(xué)習(xí)過(guò)C語(yǔ)言的小伙伴可能知道,switch也是選擇結(jié)構(gòu)的一種,是具有判定能力的語(yǔ)法結(jié)構(gòu),那么他們都必須具備:判定+分支功能!
我們知道if可以搭配elseif或else來(lái)實(shí)現(xiàn)分支功能,那么我們switch如何實(shí)現(xiàn)分支功能呢?這樣,我們先來(lái)看一段代碼:
可能看到這有小伙伴會(huì)有疑問(wèn),這里為什么把后面case里面的語(yǔ)句也打印出來(lái)了呢???
其實(shí):case只是提供入口而已,case并不能實(shí)現(xiàn)分支功能,它本身是用來(lái)進(jìn)行判定的!像上面那段代碼,從case2進(jìn)入只要沒(méi)有碰到break程序就會(huì)一直向下執(zhí)行,直到結(jié)束switch!
所以我們要注意,要在每條case完成后按需加上break,所以break在switch里的作用就相當(dāng)于分支功能!
推薦寫法:
其實(shí)細(xì)心的小伙伴發(fā)現(xiàn)了,萬(wàn)一我們輸入的不是1~5呢?
這里我們就要用到default了,在往后寫代碼,我都建議使用switch時(shí)都帶上default,并且將default寫在最后一個(gè)case后面,雖然default從語(yǔ)法上寫在任何位置都是支持的,但是為了我們的代碼可讀性,能更直觀,建議寫在最后!
例:
intmain()
intday=0;
scanf("%d",day);
switch(day)
case1:
printf("星期一\n");
break;
case2:
printf("星期二\n");
break;
case3:
printf("星期三\n");
break;
case4:
printf("星期四\n");
break;
case5:
printf("星期五\n");
break;
default:
printf("輸入錯(cuò)誤\n");
break;
return0;
}
如果多個(gè)不同的case匹配,想執(zhí)行同一個(gè)語(yǔ)句怎么辦呢?比如說(shuō)我希望輸入1~5都是工作日,輸入6~7是休息日,推薦寫法:
intmain()
intday=0;
scanf("%d",day);
switch(day)
case1:
case2:
case3:
case4:
case5:
printf("工作日\(chéng)n");
break;
case6:
case7:
printf("休息日\(chéng)n");
break;
default:
printf("輸入錯(cuò)誤\n");
break;
return0;
}
2、如何正確的使用case
現(xiàn)在我們就來(lái)學(xué)習(xí)下使用case的細(xì)節(jié):
case后面只能是常量整型,或者常量表達(dá)式,不能是浮點(diǎn)型,可以是字符型,因?yàn)樽址举|(zhì)上存儲(chǔ)在內(nèi)存中是它們的ASCII碼,所以是屬于整型家族的!
那么const修飾的變量可以放在case后面嗎?
答案是不可以的!為什么不可以呢?因?yàn)閏onst修飾的變量是常變量,它擁有常量的屬性,但本質(zhì)上還是一個(gè)變量!
下面有幾點(diǎn)case使用建議給大家:
按字母或數(shù)字順序排列各條case語(yǔ)句把正常情況放在前面,而把異常情況放在后面(做好注釋)簡(jiǎn)化每種情況對(duì)應(yīng)的操作,case語(yǔ)句后面的代碼盡量不要超過(guò)20行不要為了使用case語(yǔ)句而刻意制造一個(gè)變量default子句只用于檢查真正的默認(rèn)情況
3、循環(huán)語(yǔ)句whilefordowhile深度講解
相信大家學(xué)過(guò)C語(yǔ)言的對(duì)whilefordowhile循環(huán)的基本語(yǔ)法肯定是了如指掌了,所以今天我就不帶著大家學(xué)習(xí)基本語(yǔ)法了,我們直接看流程圖:
我們要注意所有循環(huán)結(jié)構(gòu)的三要素:條件初始化,條件判定,條件更新。
三種循環(huán)死循環(huán)寫法(特殊情況不具備三要素):
我們來(lái)看幾個(gè)使用循環(huán)語(yǔ)句的注意點(diǎn):
建議寫for語(yǔ)句的時(shí)候循環(huán)控制變量采用半開半閉取值范圍:比如:for(i=0;i++i),for(i=0;i++i);我們更推薦第一種寫法,因?yàn)檠h(huán)次數(shù)明確,便于個(gè)數(shù)計(jì)算。盡量不要在循環(huán)體內(nèi)修改循環(huán)控制變量,防止循環(huán)失去控制!循環(huán)語(yǔ)句的表達(dá)式不能包含任何浮點(diǎn)類型對(duì)象,通過(guò)上期我們知道,浮點(diǎn)數(shù)在存儲(chǔ)時(shí)是會(huì)造成精度損失的!
4、continue的作用是什么
我們知道continue是用于終止本次循環(huán)的,也就是本次循環(huán)中continue后邊的代碼不會(huì)再執(zhí)行!
我們分別來(lái)演示下三種循環(huán)下continue不同的地方:
while:
while循環(huán)執(zhí)行continue是直接跳轉(zhuǎn)到while語(yǔ)句的判斷部分,進(jìn)行下一次循環(huán)的入口判斷。
dowhile:
dowhile循環(huán)執(zhí)行continue是直接跳轉(zhuǎn)到dowhile語(yǔ)句下面的判斷部分,進(jìn)行下一次循環(huán)的入口判斷。
for:
for循環(huán)執(zhí)行continue是直接跳轉(zhuǎn)到for語(yǔ)句的條件更新部分,然后再進(jìn)行下一次循環(huán)的入口判斷。
相信看到這小伙伴們對(duì)continue的理解更加深刻了,那么接著往后看吧!
5、goto真的沒(méi)人用了嗎
可能跟著學(xué)校在學(xué)習(xí)的小伙伴,都沒(méi)聽老師講過(guò)goto語(yǔ)句,那么今天我們就來(lái)了解下為什么很少人會(huì)用goto語(yǔ)句?
goto語(yǔ)句是c語(yǔ)言給我們提供一個(gè)基本的語(yǔ)法結(jié)構(gòu),給我們提供了代碼跳轉(zhuǎn)的一個(gè)能力,對(duì)于我們一般的程序員來(lái)講,因?yàn)樘`活可能會(huì)導(dǎo)致我們語(yǔ)句在執(zhí)行的時(shí)候它的分支可能會(huì)不明確,所以在很多的公司內(nèi)它的編碼規(guī)范當(dāng)中是禁止使用goto語(yǔ)句的,但是如果我們把goto語(yǔ)句用好了是會(huì)出奇效的今天不講奇效,重點(diǎn)講作用:
goto語(yǔ)句通常會(huì)用兩種用法:向下跳轉(zhuǎn),向上跳轉(zhuǎn):
那么我們應(yīng)該如何看待goto呢?
1、有很多公司確實(shí)禁止使用goto,不過(guò),這個(gè)問(wèn)題我們還是靈活對(duì)待,goto在解決很多問(wèn)題是有奇效的。
2、我們可以認(rèn)為goto使用場(chǎng)景較少,一般不使用。但是必須得知道goto,需要的時(shí)候,也必須會(huì)用。
我們來(lái)看個(gè)例子吧,在Linux內(nèi)核源代碼中充滿了大量的goto:
所以說(shuō),goto還是有人用的!
6、void到底是何方妖怪
我們知道C語(yǔ)言提供了很多種數(shù)據(jù)類型,int,float,char...大家都知道void是空類型,那么首先我們來(lái)思考第一個(gè)問(wèn)題,void可以定義變量嗎?
答案顯然是不可以的!void的類型大小是不確定的!
經(jīng)過(guò)測(cè)試,void在windows環(huán)境的vs編譯器下sizeof求出的大小是0,而在linux環(huán)境的gcc編譯器sizeof求出的大小卻是1!
既然在gcc編譯器求出的大小是1,為什么還是不能定義變量?其實(shí)最主要的原因是void本身就被編譯器解釋為空類型,強(qiáng)制的不允許定義變量,在語(yǔ)義的級(jí)別上就被約束了!
而void作為空類型,理論上是不應(yīng)該開辟空間的,即使開辟了空間,也僅僅作為一個(gè)占位符看待!
我們來(lái)看void的幾個(gè)場(chǎng)景:
①void修飾函數(shù)但是有了返回值:
由上可見,void修飾的函數(shù)是不能接收返回值的,但是經(jīng)過(guò)測(cè)試,如果不拿變量接收返回值一樣可以編譯過(guò)去,但是不要這樣寫,首先void充當(dāng)占位符,讓我們知道此函數(shù)不需要返回值,再者,可以告知編譯器,這個(gè)返回值無(wú)法接收!
②void充當(dāng)函數(shù)形參列表:
同時(shí)我們也能看出來(lái),void充當(dāng)函數(shù)形參列表,我們?cè)趘s環(huán)境下如果強(qiáng)求給函數(shù)傳參是會(huì)有警告的,但是編譯仍然能通過(guò),但是如果我們?cè)贚inux環(huán)境下是會(huì)直接報(bào)錯(cuò)的!這個(gè)取決于編譯器!
③void既然不能定義變量,那么void*呢?
首先告訴小伙伴們答案,顯然是可以的!
為什么呢,因?yàn)関oid*是指針,指針的大小在任何平臺(tái)都是固定的,如果在32位的操作系統(tǒng)下指針的大小是4個(gè)字節(jié),如果在64位操作系統(tǒng)下指針的大小是8個(gè)字節(jié)(在指針章節(jié)我們會(huì)詳細(xì)講解),不信我們就用sizeof求一下指針?biāo)嫉拇笮。?/p>
④void*可以被任何類型的直接接收,同時(shí)void*可以接收任意指針類型(常用):
通常我們void*會(huì)用在庫(kù),系統(tǒng)接的設(shè)計(jì)上:比如在C中memset、memcmp函數(shù)等...
⑤void*定義的指針變量可以進(jìn)行運(yùn)算操作嗎?
原因:因?yàn)橐话銓?duì)指針進(jìn)行+或-更多的是衡量一個(gè)指針向前或者向后移動(dòng)步長(zhǎng)的問(wèn)題,而整型指針基本都會(huì)指向一個(gè)整型變量,所以對(duì)它進(jìn)行++后一定是跳過(guò)一個(gè)整型變量指向下一個(gè)整型變量,也就是說(shuō)向后移動(dòng)sizeof(int);的大小,而void*指針的大小本來(lái)就是不明確的!
但是在Linux環(huán)境下是可以編譯通過(guò)的,因?yàn)長(zhǎng)inux求sizeof(void);是占1個(gè)字節(jié)的,所以對(duì)void*指針進(jìn)行++--是向前或向后移動(dòng)一個(gè)字節(jié),但是在windowsvs環(huán)境下占0字節(jié),無(wú)意義
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 活動(dòng)策劃培訓(xùn)教程
- 洛陽(yáng)張繼剛核心素養(yǎng)培訓(xùn)
- 2024-2025學(xué)年江西省上饒市高一下學(xué)期期中考試歷史試題(解析版)
- 2026年教育心理學(xué)基礎(chǔ)測(cè)試題庫(kù)
- 室內(nèi)造景植物培訓(xùn)課件
- 2026年建筑設(shè)計(jì)師建筑結(jié)構(gòu)空間規(guī)劃專業(yè)題庫(kù)
- 2026年網(wǎng)絡(luò)安全分析師認(rèn)證模擬試題
- 2026年食品安全與營(yíng)養(yǎng)健康專題題目
- 2026年中醫(yī)經(jīng)絡(luò)理論穴位辨識(shí)與經(jīng)絡(luò)調(diào)理操作試題
- 2026年證券投資顧問(wèn)考試題庫(kù)及答案解析
- 心臟血管檢查課件
- 運(yùn)用PDCA循環(huán)管理提高手衛(wèi)生依從性課件
- 二手房定金合同(2023版)正規(guī)范本(通用版)1
- 點(diǎn)因素法崗位評(píng)估體系詳解
- 初中畢業(yè)英語(yǔ)學(xué)業(yè)考試命題指導(dǎo)
- DB63T 1933-2021無(wú)人機(jī)航空磁測(cè)技術(shù)規(guī)范
- 繪本這就是二十四節(jié)氣春
- 開車前安全環(huán)保檢查表(PSSR )
- 2023年吉林省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 渾河渾南攔河壩海漫改造工程項(xiàng)目環(huán)評(píng)報(bào)告
- YY/T 1843-2022醫(yī)用電氣設(shè)備網(wǎng)絡(luò)安全基本要求
評(píng)論
0/150
提交評(píng)論