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

C語(yǔ)言深度解剖篇之關(guān)鍵字以及補(bǔ)充內(nèi)容

 更新時(shí)間:2022年06月26日 12:31:58   作者:沐曦希  
C語(yǔ)言的關(guān)鍵字共有32個(gè),根據(jù)關(guān)鍵字的作用,可分其為數(shù)據(jù)類型關(guān)鍵字、控制語(yǔ)句關(guān)鍵字、存儲(chǔ)類型關(guān)鍵字和其它關(guān)鍵字四類,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言深度解剖篇之關(guān)鍵字以及補(bǔ)充內(nèi)容的相關(guān)資料,需要的朋友可以參考下

關(guān)鍵字分類

一般的書上,C語(yǔ)言的關(guān)鍵字都是32個(gè),但是這個(gè)都是 C90(C89) 的標(biāo)準(zhǔn)。其實(shí) C99 后又新增了5個(gè)關(guān)鍵字。不過(guò),目前主流的編譯器,對(duì) C99 支持的并不好,按照C90標(biāo)準(zhǔn) ,即認(rèn)為32個(gè)。

關(guān)鍵字說(shuō)明
auto聲明自動(dòng)變量
short聲明短整型變量或函數(shù)
int聲明整型變量或函數(shù)
long聲明長(zhǎng)整型變量或函數(shù)
float聲明浮點(diǎn)型變量或函數(shù)
double聲明雙精度變量或函數(shù)
char聲明字符型變量或函數(shù)
struct聲明結(jié)構(gòu)體變量或函數(shù)
union聲明共用數(shù)據(jù)類型
enum聲明枚舉類型
typedef用以給數(shù)據(jù)類型取別名
const聲明只讀變量
unsigned聲明無(wú)符號(hào)類型變量或函數(shù)
signed聲明有符號(hào)類型變量或函數(shù)
extern聲明變量是在其他文件正聲明
register聲明寄存器變量
static聲明靜態(tài)變量
volatile說(shuō)明變量在程序執(zhí)行中可被隱含地改變
void聲明函數(shù)無(wú)返回值或無(wú)參數(shù),聲明無(wú)類型指針
if條件語(yǔ)句
else條件語(yǔ)句否定分支(與 if 連用)
switch用于開關(guān)語(yǔ)句
case開關(guān)語(yǔ)句分支
for一種循環(huán)語(yǔ)句
do循環(huán)語(yǔ)句的循環(huán)體
while循環(huán)語(yǔ)句的循環(huán)條件
goto無(wú)條件跳轉(zhuǎn)語(yǔ)句
continue結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán)
break跳出當(dāng)前循環(huán)
default開關(guān)語(yǔ)句中的“其他”分支
sizeof計(jì)算數(shù)據(jù)類型長(zhǎng)度
return子程序返回語(yǔ)句(可以帶參數(shù),也可不帶參數(shù))循環(huán)條件

補(bǔ)充內(nèi)容

第一個(gè)C程序

#include<stdio.h>
#include<windows.h>//windows.h系統(tǒng)頭文件,僅僅是為了停屏
int main()
{
	printf("hello world!\n");
	system("pause");//pause停屏
	return 0;
}

文件代碼在進(jìn)行生成解決方案后會(huì)轉(zhuǎn)換成可執(zhí)行程序(二進(jìn)制文件 .exe)

可以通過(guò)清空解決方案來(lái)清空可執(zhí)行程序

  • 在windows中,雙擊的本質(zhì)運(yùn)行程序,將程序加載到內(nèi)存中。
  • 任何程序在被被運(yùn)行之前都必須被加載到內(nèi)存當(dāng)中。
  • 加載到內(nèi)存中,速度快。

馮諾依曼

定義與聲明

變量

在內(nèi)存中開辟特定大小的空間,用來(lái)保存數(shù)據(jù)

變量的定義

類型  變量名 = 默認(rèn)值
int a = 10;
char c = 'c';

定義變量的原因:因?yàn)橛袛?shù)據(jù)需要暫時(shí)被保存起來(lái),等待后續(xù)處理。

變量的本質(zhì)

  • 所有的變量的本質(zhì)都是要在內(nèi)存的某個(gè)位置開辟空間的。
  • 程序運(yùn)行,需要加載到內(nèi)存中
  • 程序計(jì)算,需要使用變量

定義變量的本質(zhì):在內(nèi)存中開辟一塊空間,用來(lái)保存數(shù)據(jù)。(為何一定是內(nèi)存:因?yàn)槎x變量,也是程序邏輯的一部分,程序已經(jīng)被加載到內(nèi)存)

定義:開辟空間,只能有一次。

聲明:告知,可以多次。

int a = 10;//a的定義
a = 20;//賦值
a = 100;//賦值

變量的分類

變量分為:局部變量和全局變量

局部變量:包含在代碼塊中的變量叫做局部變量。局部變量具有臨時(shí)性。進(jìn)入代碼塊,自動(dòng)形成局部變量,退出代碼塊自動(dòng)釋放。[網(wǎng)上很多說(shuō)函數(shù)中的變量是局部變量,不能說(shuō)錯(cuò),但說(shuō)法是不準(zhǔn)確的](定義在代碼塊內(nèi))

全局變量:在所有函數(shù)外定義的變量,叫做全局變量。全局變量具有全局性。(定義在代碼塊外)
代碼塊:用{}括起來(lái)的區(qū)域,就叫做代碼塊

#include<stdio.h>
int g_val = 100;//全局變量
int main()
{
	int a = 10;//局部變量,main函數(shù)也是函數(shù),也有代碼塊{}
	if(a == 10)
	{
		int b = 10;//局部變量
    }
	printf("a=%d\n", a);
	return 0;
}

變量的作用域

作用域:指的是該變量的可以被正常訪問(wèn)的代碼區(qū)域。
局部變量:只在本代碼塊內(nèi)有效。
全局變量:整個(gè)程序運(yùn)行期間,都有效。

其中全局變量:

  • 在任何代碼塊中都可以被訪問(wèn)
  • 在任何代碼塊中都可以被訪問(wèn),甚至被修改。
  • 當(dāng)全局變量與局部變量同名時(shí),局部變量?jī)?yōu)先。
#include<stdio.h>
int g_vax = 10;//全局變量
void test()
{
	int g_val = 100;//局部變量的g_val只能在本代碼被訪問(wèn)
	printf("%d\n", g_val);//在全局變量g_val任何代碼塊中都可以被訪問(wèn),甚至被修改
	//輸出的是局部,也就是局部和全部同名的時(shí)候,優(yōu)先局部。
}
int main()
{
	test();
	printf("%d\n", g_vax);//在任何代碼塊中都可以被訪問(wèn)
	return 0;
}

變量的生命周期

生命周期概念:指的是該變量從定義到被釋放的時(shí)間范圍,所謂的釋放,指的是曾經(jīng)開辟的空間”被釋放“。
局部變量: 進(jìn)入代碼塊,形成局部變量[開辟空間],退出代碼塊,"釋放"局部變量。
全局變量: 定義完成之后,程序運(yùn)行的整個(gè)生命周期內(nèi),該變量一直都有效。

作用域 vs 生命周期

作用域:衡量變量影響的范圍,該變量的有效作用域。
生命周期:描述的是變量生存時(shí)間的長(zhǎng)短。時(shí)間的概念:什么時(shí)候被開辟,什么時(shí)候被釋放。

最寬宏大量的關(guān)鍵字 - auto

如何使用:一般在代碼塊中定義的變量,即局部變量,默認(rèn)都是auto修飾的,不過(guò)一般省略。
默認(rèn)的所有變量都是auto嗎?不是,一般用來(lái)修飾局部變量
局部變量包括自動(dòng)變量,臨時(shí)變量和局部變量。

#include <stdio.h>
int main()
{
	for (int i = 0; i < 10; i++) //局部變量i也可以被auto修飾
	{
		printf("i=%d\n", i);
		if (1)
		{
			auto int j = 0;//自動(dòng)變量
			printf("before: j=%d\n", j);
			j += 1;
			printf("after : j=%d\n", j);
		}
	}
	return 0;
}

auto已經(jīng)很老,基本上不使用了。

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

CPU主要是負(fù)責(zé)進(jìn)行計(jì)算的硬件單元,但是為了方便運(yùn)算,一般第一步需要先把數(shù)據(jù)從內(nèi)存讀取到CPU內(nèi),那么也就需要CPU具有一定的數(shù)據(jù)臨時(shí)存儲(chǔ)能力。注意:CPU并不是當(dāng)前要計(jì)算了,才把特定數(shù)據(jù)讀到CPU里面,那樣太慢了。
所以現(xiàn)代CPU內(nèi),都集成了一組叫做寄存器的硬件,用來(lái)做臨時(shí)數(shù)據(jù)的保存。

存儲(chǔ)金字塔

距離CPU越近的存儲(chǔ)硬件,速度越快。

寄存器的認(rèn)識(shí)

CPU內(nèi)集成了一組存儲(chǔ)硬件即可,這組硬件叫做寄存器。

寄存器存在的本質(zhì)

在硬件層面上,提高計(jì)算機(jī)的運(yùn)算效率。因?yàn)椴恍枰獜膬?nèi)存里讀取數(shù)據(jù)啦。

register 修飾變量

盡量將所修飾變量,放入CPU寄存區(qū)中,從而達(dá)到提高效率的目的
那么什么樣的變量,可以采用register呢?
1.局部的(全局會(huì)導(dǎo)致CPU寄存器被長(zhǎng)時(shí)間占用)
2.不會(huì)被寫入的(寫入就需要寫回內(nèi)存,后續(xù)還要讀取檢測(cè)的話,就無(wú)意義了)
3.高頻被讀取的(提高效率所在)
4.如果要使用,請(qǐng)不要大量使用,因?yàn)榧拇嫫鲾?shù)量有限
5.register修飾的變量,不能取地址(因?yàn)橐呀?jīng)放在寄存區(qū)中了嘛,地址是內(nèi)存相關(guān)的概念)

寄存器–cache–內(nèi)存–SSD/flash/硬盤–光盤–磁盤

硬盤通過(guò)緩存技術(shù)成內(nèi)存,內(nèi)存通過(guò)緩存技術(shù)成寄存器。

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

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

對(duì)任何一種硬件而言,充當(dāng)上游硬件的緩存。

例:內(nèi)存可以看成硬盤的一個(gè)大緩存;cache和寄存器相當(dāng)于內(nèi)存某一種緩存。

CPU訪問(wèn)數(shù)據(jù)的時(shí),以最小的成本達(dá)到最高的效率。

#include<stdio.h>
int main()
{
	register int a = 10;
	printf("%p\n", &a);
	return 0;
}

寫在最后

到此這篇關(guān)于C語(yǔ)言深度解剖篇之關(guān)鍵字以及補(bǔ)充內(nèi)容的文章就介紹到這了,更多相關(guān)C語(yǔ)言關(guān)鍵字及補(bǔ)充內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深度探究C++中的函數(shù)重載的用法

    深度探究C++中的函數(shù)重載的用法

    這篇文章主要介紹了C++中的函數(shù)重載用法,包括重載時(shí)參數(shù)類型的差異以及匹配和轉(zhuǎn)換等方面問(wèn)題的講解,需要的朋友可以參考下
    2016-01-01
  • Visual Studio 2019 Professional 激活方法詳解

    Visual Studio 2019 Professional 激活方法詳解

    這篇文章主要介紹了Visual Studio 2019 Professional 激活方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 指針與const限定符的使用分析

    指針與const限定符的使用分析

    本篇文章對(duì)指針與const限定符的使用進(jìn)行了分析介紹。需要的朋友參考下
    2013-05-05
  • C語(yǔ)言中二級(jí)指針的實(shí)例詳解

    C語(yǔ)言中二級(jí)指針的實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言中二級(jí)指針的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家掌握理解二級(jí)指針的知識(shí),需要的朋友可以參考下
    2017-10-10
  • 使用C語(yǔ)言繪制統(tǒng)計(jì)圖中的餅圖

    使用C語(yǔ)言繪制統(tǒng)計(jì)圖中的餅圖

    常用的統(tǒng)計(jì)圖有條形圖、柱形圖、折線圖、曲線圖、餅圖、環(huán)形圖、扇形圖,本文主要為大家詳細(xì)介紹了如何使用使用C語(yǔ)言繪制統(tǒng)計(jì)圖中的餅圖,希望對(duì)大家有所幫助
    2024-02-02
  • java 出現(xiàn)NullPointerException的原因及解決辦法

    java 出現(xiàn)NullPointerException的原因及解決辦法

    這篇文章主要介紹了java 出現(xiàn)NullPointerException的原因及解決辦法的相關(guān)資料,這里說(shuō)明出現(xiàn)NullPointerException 的原因的總結(jié),并說(shuō)明該如何解決,需要的朋友可以參考下
    2017-08-08
  • 簡(jiǎn)要對(duì)比C語(yǔ)言中的truncate()函數(shù)與ftruncate()函數(shù)

    簡(jiǎn)要對(duì)比C語(yǔ)言中的truncate()函數(shù)與ftruncate()函數(shù)

    這篇文章主要介紹了C語(yǔ)言中的truncate()函數(shù)與ftruncate()函數(shù)的簡(jiǎn)要對(duì)比,注意其之間的區(qū)別,需要的朋友可以參考下
    2015-09-09
  • C++中的運(yùn)算符重載詳解

    C++中的運(yùn)算符重載詳解

    大家好,本篇文章主要講的是C++中的運(yùn)算符重載詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 一文讀懂C++中Protobuf

    一文讀懂C++中Protobuf

    Protocol Buffers 是一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化、或者說(shuō)序列化,本文詳解了Protobuf的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • C/C++?extern和static的使用詳解

    C/C++?extern和static的使用詳解

    這篇文章主要介紹了C/C++?extern和static的使用,在講到extern和static的時(shí)候先了解一下定義和聲明的基本概念,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06

最新評(píng)論