亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語(yǔ)言關(guān)鍵字之a(chǎn)uto register詳解

 更新時(shí)間:2022年01月16日 16:26:27   作者:小白又菜  
這篇文章主要為大家介紹了C語(yǔ)言關(guān)鍵字之a(chǎn)uto register,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

一:auto

在學(xué)習(xí)關(guān)鍵字auto之前我們需要先了解兩個(gè)概念:作用域和生命周期。

作用域

作用域(scope)是程序設(shè)計(jì)概念,通常來(lái)說(shuō),一段程序代碼中所用到的名字并不總是有效/可用

的 而限定這個(gè)名字的可用性的代碼范圍就是這個(gè)名字的作用域。

局部變量的作用域:作用范圍包含在代碼塊中的變量。在哪兒內(nèi)定義,只在其范圍內(nèi)有效。

全局變量的作用域:在所有函數(shù)外定義的變量。整個(gè)項(xiàng)目中都有效。

我們用簡(jiǎn)單代碼來(lái)理解一下:

int a = 20;
int main()
{
	if (1)
	{
		int b = 10;
		printf("%d", b);
	}
	return 0;
}

這段代碼中我們可以看到我們創(chuàng)建了兩個(gè)變量,一個(gè)是全局變量 a ;一個(gè)是局部變量 b 。

根據(jù)作用域的定義我們可以知道:

全局變量a的作用域是整個(gè)工程:

 局部變量b 的作用域只是包含在if括號(hào)內(nèi)部:

 為了我們更好的理解這個(gè)代碼我們寫幾種代碼,加深理解:

int a = 20;
int main()
{
	if (1)
	{
		int b = 10;
	}
	printf("%d", a);
	printf("%d", b);
	return 0;
}

這段代碼我們發(fā)現(xiàn)報(bào)錯(cuò)

 雖然我們b創(chuàng)建了,但是b是一個(gè)局部變量,作用域只在代碼塊內(nèi)部( if 括號(hào)內(nèi)部 ),不包括printf這一行,因此程序報(bào)錯(cuò),訪問(wèn)不到b。

特殊的:

當(dāng)局部變量和全局變量發(fā)生沖突時(shí),局部變量?jī)?yōu)先。

這句話的意思是:當(dāng)定義的變量名相同時(shí),局部變量?jī)?yōu)先

int a = 20;
int main()
{
	a = 10;
	printf("%d", a);
	return 0;
}

我們打印就可發(fā)現(xiàn):

 當(dāng)全局變量和局部變量發(fā)生沖突時(shí),局部變量?jī)?yōu)先。為了避免這種問(wèn)題的出現(xiàn),盡量不要使用相同的變量名定義。

生命周期

變量的生命周期指的是變量的創(chuàng)建到變量的銷毀之間的一個(gè)時(shí)間段

局部變量的生命周期是:進(jìn)入局部變量所在范圍開(kāi)始 ----> 出了局部變量的范圍結(jié)束

全局變量的生命周期是:整個(gè)程序的生命周期。生命周期main函數(shù)進(jìn)入--->結(jié)束 整個(gè)程序的生命周期

為了更方便的理解:我們可以通俗的理解為,一個(gè)變量的存活時(shí)間,就是這個(gè)變量的生命周期。

例:古代某一皇帝從出生-->駕崩。從出生到駕崩這一段時(shí)間就是這位皇帝的生命周期。

// ***************生命周期***********
//int  g = 100;//全局變量的生命周期:
//			   //生命周期main函數(shù)進(jìn)入--->結(jié)束 整個(gè)程序的生命周期
//int main(){
//	{  // 局部變量生命周期:
//	   //進(jìn)入局部變量所在范圍開(kāi)始 ----> 出了局部變量的范圍結(jié)束
//		int a = 100;
//		printf("%d\n", a);
//	}
//
//
//	return 0;
//}

auto

auto號(hào)稱是最寬宏大量的關(guān)鍵字

auto的使用:一般在代碼塊中定義的變量,局部變量,默認(rèn)都是auto修飾的。只在本代碼塊中使用 auto可省略。

用代碼解釋就是:

auto int g_val = 100;
int main()
{
	for (auto int i = 0; i < 10; i++)
	{
		printf("i = %d\n", i);
		if (1)
		{
			auto int j = 1;
			printf("before: %d\n", j);
			j++;
			printf("after: %d\n", j);
		}
	}
	return 0;
}

由于auto只可修飾局部變量

因此第一句auto int g_val = 100;是錯(cuò)誤的

在之后的代碼內(nèi)部的全局變量中,auto所修飾的局部變量中的auto都是可以省略的,因此我們也說(shuō)auto是最古老的關(guān)鍵字,我們?cè)谄綍r(shí)的編程中也可省略auto。

二:register

register -- 寄存器   ----最快的關(guān)鍵字

我們首先要了解存儲(chǔ)等級(jí)

離CPU越近的存儲(chǔ)單元,效率越高,成本單價(jià)越高。

離CPU越遠(yuǎn)的存儲(chǔ)單元,效率越低,成本單價(jià)越低。

對(duì)于任意一種硬件而言,上游硬件都是下游硬件的緩存,因此我們可以說(shuō)寄存器是下游存儲(chǔ)設(shè)備的緩存。

寄存器的本質(zhì):本質(zhì)是在硬件層面上,提高計(jì)算機(jī)的運(yùn)算效率。

什么變量可以用register

1.局部變量(全局變量導(dǎo)致CPU寄存器被長(zhǎng)時(shí)間占用)

2.不會(huì)被寫入(寫入就要寫回內(nèi)存,要重新加載,無(wú)意義)

3.被高頻使用(提高效率所在,放在寄存器,不用訪存讀取,提高效率)

int main()
{
	register int val = 100;
	//寄存器變量沒(méi)有地址,不能取地址
	val = 200; //可以被寫入
	printf("%d\n", val);
	// 在gcc編譯器下 也不允許取地址
	return 0;
}

提示:不要大量使用register,因?yàn)榧拇嫫鞯臄?shù)量有限。

由于使用register關(guān)鍵字,直接將val存在寄存器內(nèi),因此val沒(méi)有內(nèi)存地址,因此不能進(jìn)行取地址操作。

總結(jié):

包括作用域,生命周期,auto和register關(guān)鍵字的理解是使用。

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語(yǔ)言進(jìn)階棧幀示例詳解教程

    C語(yǔ)言進(jìn)階棧幀示例詳解教程

    這篇文章主要為大家介紹了C語(yǔ)言進(jìn)階棧幀的示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • C語(yǔ)言創(chuàng)建windows窗口實(shí)例

    C語(yǔ)言創(chuàng)建windows窗口實(shí)例

    這篇文章主要介紹了C語(yǔ)言創(chuàng)建windows窗口實(shí)例,本文直接給出實(shí)現(xiàn)代碼,同時(shí)講解了編碼的步驟,需要的朋友可以參考下
    2015-04-04
  • C語(yǔ)言 sizeof 函數(shù)詳情

    C語(yǔ)言 sizeof 函數(shù)詳情

    這篇文章主要介紹了C語(yǔ)言 sizeof 函數(shù),在 C 語(yǔ)言中,char 字符串也是一種非常重要的數(shù)據(jù)類型,我們除了使用 sizeof 函數(shù)獲取字符串長(zhǎng)度之外,使用 sizeof 函數(shù)同樣也可以完成字符串長(zhǎng)度的獲取,下面文章內(nèi)容具體描述該內(nèi)容,需要的朋友可以參考以下
    2021-10-10
  • 基于C語(yǔ)言的開(kāi)源csv解析庫(kù)MiniCSV的使用示例

    基于C語(yǔ)言的開(kāi)源csv解析庫(kù)MiniCSV的使用示例

    這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言中的開(kāi)源csv解析庫(kù)——MiniCSV的使用示例,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07
  • 詳解C++中的vector容器及用迭代器訪問(wèn)vector的方法

    詳解C++中的vector容器及用迭代器訪問(wèn)vector的方法

    使用迭代器iterator可以更方便地解引用和訪問(wèn)成員,當(dāng)然也包括vector中的元素,本文就來(lái)詳解C++中的vector容器及用迭代器訪問(wèn)vector的方法,需要的朋友可以參考下
    2016-05-05
  • Vscode自定義注釋模板的實(shí)現(xiàn)示例

    Vscode自定義注釋模板的實(shí)現(xiàn)示例

    本文主要介紹了Vscode自定義注釋模板的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 解析C++中的虛擬函數(shù)及其靜態(tài)類型和動(dòng)態(tài)類型

    解析C++中的虛擬函數(shù)及其靜態(tài)類型和動(dòng)態(tài)類型

    虛擬函數(shù)(Visual Function)亦常被成為虛函數(shù),是C++中的一個(gè)重要特性,本文我們就來(lái)解析C++中的虛擬函數(shù)及其靜態(tài)類型和動(dòng)態(tài)類型
    2016-06-06
  • C++去除輸入行中空白的方法

    C++去除輸入行中空白的方法

    這篇文章主要介紹了C++去除輸入行中空白的方法,涉及C++針對(duì)數(shù)組的遍歷與替換的相關(guān)使用技巧,需要的朋友可以參考下
    2015-07-07
  • Qt實(shí)現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    Qt實(shí)現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開(kāi)發(fā)極大的方便了開(kāi)發(fā)效率,本章將重點(diǎn)介紹SqlRelationalTable關(guān)聯(lián)表組件的常用方法及靈活運(yùn)用,感興趣的可以了解一下
    2023-12-12
  • C語(yǔ)言實(shí)現(xiàn)餐廳點(diǎn)餐系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)餐廳點(diǎn)餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)餐廳點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論