欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言全面細(xì)致精講關(guān)鍵字的使用

 更新時(shí)間:2022年05月25日 10:32:54   作者:程序猿教你打籃球  
關(guān)鍵字是C語(yǔ)言非常重要的一部分,熟練的掌握和使用關(guān)鍵字有助于我們更加熟悉了解C語(yǔ)言,同時(shí)C語(yǔ)言的關(guān)鍵字也是面試筆試中常考的內(nèi)容。C語(yǔ)言的關(guān)鍵字共有32個(gè),但并不是每個(gè)關(guān)鍵字都有坑,本篇文章將通過(guò)理論聯(lián)系實(shí)際的方式為大家講解C語(yǔ)言中易混易錯(cuò)以及??嫉囊恍╆P(guān)鍵字

1、switch 深入理解

學(xué)習(xí)過(guò)C語(yǔ)言的小伙伴可能知道,switch 也是選擇結(jié)構(gòu)的一種,是具有判定能力的語(yǔ)法結(jié)構(gòu),那么他們都必須具備:判定+分支功能!

我們知道 if 可以搭配 else if 或 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)行判定的!像上面那段代碼,從case 2 進(jìn)入只要沒(méi)有碰到 break 程序就會(huì)一直向下執(zhí)行,直到結(jié)束 switch !

所以我們要注意,要在每條 case 完成后按需加上 break,所以 break 在 switch 里的作用就相當(dāng)于分支功能!

推薦寫(xiě)法:

其實(shí)細(xì)心的小伙伴發(fā)現(xiàn)了,萬(wàn)一我們輸入的不是1~5呢?

這里我們就要用到 default 了,在往后寫(xiě)代碼,我都建議使用switch 時(shí)都帶上 default ,并且將 default 寫(xiě)在最后一個(gè) case 后面,雖然 default 從語(yǔ)法上寫(xiě)在任何位置都是支持的,但是為了我們的代碼可讀性,能更直觀,建議寫(xiě)在最后!

例:

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	default :
		printf("輸入錯(cuò)誤\n");
        break;
	}
	return 0;
}

如果多個(gè)不同的 case 匹配,想執(zhí)行同一個(gè)語(yǔ)句怎么辦呢?比如說(shuō)我希望輸入1~5都是工作日,輸入6~7是休息日,推薦寫(xiě)法:

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\(chéng)n");
		break;
	case 6:
	case 7:
		printf("休息日\(chéng)n");
		break;
	default:
		printf("輸入錯(cuò)誤\n");
		break;
	}
	return 0;
}

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)?const 修飾的變量是常變量,它擁有常量的屬性,但本質(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ǔ)句while for do while深度講解

相信大家學(xué)過(guò)C語(yǔ)言的對(duì) while for do while 循環(huán)的基本語(yǔ)法肯定是了如指掌了,所以今天我就不帶著大家學(xué)習(xí)基本語(yǔ)法了,我們直接看流程圖:

我們要注意所有循環(huán)結(jié)構(gòu)的三要素:條件初始化,條件判定,條件更新。

三種循環(huán)死循環(huán)寫(xiě)法(特殊情況不具備三要素):

我們來(lái)看幾個(gè)使用循環(huán)語(yǔ)句的注意點(diǎn):

  • 建議寫(xiě) for 語(yǔ)句的時(shí)候循環(huán)控制變量采用半開(kāi)半閉取值范圍:比如:for (i = 0; i < 10; ++i),for(i = 0; i <=9; ++i); 我們更推薦第一種寫(xiě)法,因?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)的入口判斷。

do while:

do while 循環(huán)執(zhí)行 continue 是直接跳轉(zhuǎn)到 do while 語(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)聽(tīng)老師講過(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)該開(kāi)辟空間的,即使開(kāi)辟了空間,也僅僅作為一個(gè)占位符看待!

我們來(lái)看 void 的幾個(gè)場(chǎng)景:

① void 修飾函數(shù)但是有了返回值:

由上可見(jiàn),void 修飾的函數(shù)是不能接收返回值的,但是經(jīng)過(guò)測(cè)試,如果不拿變量接收返回值一樣可以編譯過(guò)去,但是不要這樣寫(xiě),首先 void 充當(dāng)占位符,讓我們知道此函數(shù)不需要返回值,再者,可以告知編譯器,這個(gè)返回值無(wú)法接收!

② void 充當(dāng)函數(shù)形參列表:

同時(shí)我們也能看出來(lái),void 充當(dāng)函數(shù)形參列表,我們?cè)?vs 環(huán)境下如果強(qiáng)求給函數(shù)傳參是會(huì)有警告的,但是編譯仍然能通過(guò),但是如果我們?cè)?Linux 環(huán)境下是會(huì)直接報(bào)錯(cuò)的!這個(gè)取決于編譯器!

③ void 既然不能定義變量,那么 void* 呢?

首先告訴小伙伴們答案,顯然是可以的!

為什么呢,因?yàn)?void* 是指針,指針的大小在任何平臺(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)?Linux 求 sizeof(void);是占 1 個(gè)字節(jié)的,所以對(duì) void* 指針進(jìn)行 ++ -- 是向前或向后移動(dòng)一個(gè)字節(jié),但是在 windows vs 環(huán)境下占 0 字節(jié),無(wú)意義的!

根本原因是因?yàn)槭褂玫腃標(biāo)準(zhǔn)擴(kuò)展的問(wèn)題,一句話,大部分編譯器是標(biāo)準(zhǔn)C,而Linux下是擴(kuò)展C,Linux平臺(tái)也能保證標(biāo)準(zhǔn)C的運(yùn)行,感興趣的小伙伴可以自己去查詢下資料~

最后一點(diǎn),void* 指針是不能直接解引用的!因?yàn)椴⒉恢酪允裁搭愋腿ソ忉屩赶蚩臻g里的數(shù)據(jù),也就是說(shuō)并不知道解引用訪問(wèn)多少個(gè)自己,會(huì)直接編譯報(bào)錯(cuò),在 Linux 環(huán)境下也是一樣的,具體小伙伴的可以自行去測(cè)試哦!

只有埋頭,才有出頭!Come on!

到此這篇關(guān)于C語(yǔ)言全面細(xì)致精講關(guān)鍵字的使用的文章就介紹到這了,更多相關(guān)C語(yǔ)言關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++動(dòng)態(tài)內(nèi)存分配超詳細(xì)講解

    C++動(dòng)態(tài)內(nèi)存分配超詳細(xì)講解

    給數(shù)組分配多大的空間?你是否和初學(xué)C時(shí)的我一樣,有過(guò)這樣的疑問(wèn)。這一期就來(lái)聊一聊動(dòng)態(tài)內(nèi)存的分配,讀完這篇文章,你可能對(duì)內(nèi)存的分配有一個(gè)更好的理解
    2022-08-08
  • C++實(shí)現(xiàn)LeetCode(151.翻轉(zhuǎn)字符串中的單詞)

    C++實(shí)現(xiàn)LeetCode(151.翻轉(zhuǎn)字符串中的單詞)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(151.翻轉(zhuǎn)字符串中的單詞),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言算法練習(xí)之折半查找的實(shí)現(xiàn)

    C語(yǔ)言算法練習(xí)之折半查找的實(shí)現(xiàn)

    二分查找法(也叫折半查找)其本質(zhì)是分治算法的一種。這篇文章主要介紹了如何利用C語(yǔ)言實(shí)現(xiàn)折半查找,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-05-05
  • C++11中的時(shí)間庫(kù)std::chrono(引發(fā)關(guān)于時(shí)間的思考)

    C++11中的時(shí)間庫(kù)std::chrono(引發(fā)關(guān)于時(shí)間的思考)

    這篇文章主要介紹了C++11中的時(shí)間庫(kù)std::chrono(引發(fā)關(guān)于時(shí)間的思考),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C++通過(guò)COM接口操作PPT

    C++通過(guò)COM接口操作PPT

    這篇文章主要為大家詳細(xì)介紹了C++通過(guò)COM接口操作PPT的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 深入解析C++和JAVA的字符串

    深入解析C++和JAVA的字符串

    這篇文章主要介紹了C++和JAVA的字符串,JAVA 中String 和StringBuffer的區(qū)別,需要的朋友可以參考下
    2015-07-07
  • C語(yǔ)言實(shí)現(xiàn)單詞助手功能

    C語(yǔ)言實(shí)現(xiàn)單詞助手功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)單詞小助手,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • VS2019簡(jiǎn)單快速的打包可安裝項(xiàng)目(圖文教程)

    VS2019簡(jiǎn)單快速的打包可安裝項(xiàng)目(圖文教程)

    這篇文章主要介紹了VS2019簡(jiǎn)單快速的打包可安裝項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C語(yǔ)言編寫(xiě)猜數(shù)游戲

    C語(yǔ)言編寫(xiě)猜數(shù)游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言編寫(xiě)猜數(shù)游戲,可以自定義猜數(shù)范圍和機(jī)會(huì)次數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++消息隊(duì)列(定義,結(jié)構(gòu),如何創(chuàng)建,發(fā)送與接收)

    C++消息隊(duì)列(定義,結(jié)構(gòu),如何創(chuàng)建,發(fā)送與接收)

    這篇文章主要介紹了C++消息隊(duì)列(定義,結(jié)構(gòu),如何創(chuàng)建,發(fā)送與接收),消息隊(duì)列是一種先進(jìn)先出的隊(duì)列型數(shù)據(jù)結(jié)構(gòu),實(shí)際上是系統(tǒng)內(nèi)核中的一個(gè)內(nèi)部鏈表
    2022-08-08

最新評(píng)論