日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言——关键字

發(fā)布時(shí)間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言——关键字 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C語言——關(guān)鍵字


宗旨:技術(shù)的學(xué)習(xí)是有限的,分享的精神是無限的。


【謹(jǐn)記:盡量不要用printf函數(shù),要去看變量的值,內(nèi)存的值。】

?autointdoublelongcharfloatshortsignedunsignedstructunionenumstaticswitchcasedefaultbreakregisterconstvolatiletypedefexternreturnvoidcontinuedowhileifelseforgotosizeof

【定義和聲明:定義創(chuàng)建了對(duì)象并為這個(gè)對(duì)象分配了內(nèi)存,聲明沒有分配內(nèi)存。】?

auto????????????????//聲明自動(dòng)變量,缺省時(shí)編譯器一般默認(rèn)為auto
int?????????????????//
聲明整型變量?
double?????????????//
聲明雙精度變量
long???????????????//
聲明長整型變量?
char???????????????//
聲明字符變量
float???????????????//
聲明浮點(diǎn)型變量?
short???????????????//
聲明短整型變量
signed?????????????//
聲明有符號(hào)類型變量
unsigned???????????//
聲明無符號(hào)類型變量?
struct??????????????//
聲明結(jié)構(gòu)體變量
union??????????????//
聲明聯(lián)合類型數(shù)據(jù)
enum??????????????//
聲明枚舉類型
static??????????????//
聲明靜態(tài)變量???
switch?????????????//
用于開關(guān)語句???
case??????????????//
開關(guān)語句分支
default????????????//
開關(guān)語句中的其他分支?
break?????????????//
跳出當(dāng)前循環(huán)
register???????????//
聲明寄存器變量?
const?????????????//
聲明只讀變量???
volatile???????????//
說明變量在程序執(zhí)行中可被隱含地改變
typedef???????????//
用以給數(shù)據(jù)類型取別名
extern????????????//
聲明變量是在其他文件正聲明(也可以看做是引用變量)
return????????????//
子程序返回語句(可以帶參數(shù),也可不帶參數(shù))
void?????????????//
聲明函數(shù)無返回值或無參數(shù),聲明空類型指針
continue?????????//
結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán)??
do??????????????//
循環(huán)語句的循環(huán)體??
while????????????//
循環(huán)語句的循環(huán)條件
if???????????????//
條件語句
else?????????????//
條件語句否定分支(if連用)?
for??????????????//
一種循環(huán)語句
goto????????????//
無條件跳轉(zhuǎn)語句,盡量少用或者不用
sizeof???????????//
計(jì)算對(duì)象所占內(nèi)存空間大小,這不是個(gè)函數(shù)???

我在這兒只說一些比較常用而且比較重要的關(guān)鍵字

?

1. register

請(qǐng)求編譯器盡可能的將變量存到CPU內(nèi)部寄存器中而不是通過內(nèi)存尋址訪問以提高效率。。對(duì)這種變量不可以使用取址運(yùn)算符來獲取其地址,因?yàn)樗辉賰?nèi)存中。寄存器變量用的不算多,但是還是得知道是什么意思。?


2. static---?修飾變量和函數(shù)(限定作用域)

1.修飾變量

//變量又分為局部和全局變量,但它們都存在于內(nèi)存的靜態(tài)區(qū)。
//靜態(tài)全局變量,作用域僅限于變量被定義的文件中,其他文件即使用extern聲明也沒法使用。
準(zhǔn)確地說作用域是從定義之處開始,到文件結(jié)尾處結(jié)束,在定義之處前面的代碼行也不可以使用。
//靜態(tài)局部變量,在函數(shù)體里面定義的,就只能在這個(gè)函數(shù)里用,同一個(gè)文檔中的其他函數(shù)也用不了。
由于被static修飾的變量松獅存在內(nèi)存的靜態(tài)區(qū),所以即使這個(gè)函數(shù)運(yùn)行結(jié)束,
這個(gè)靜態(tài)變量的值還是不會(huì)被銷毀,函數(shù)下次使用時(shí)仍然能用。

2.修飾函數(shù)

//函數(shù)前加static使得函數(shù)成為靜態(tài)函數(shù)。
但此處static的含義不是指存儲(chǔ)方式,而使指對(duì)函數(shù)的作用域僅局限于本文件(所以又稱內(nèi)部函數(shù))。
使用內(nèi)部函數(shù)的好處是:不同的人編寫不同的函數(shù)時(shí),不用擔(dān)心自己定義的函數(shù),是否會(huì)與其他文件的函數(shù)同名。

//在C中引入關(guān)鍵字static是為了表示退出一個(gè)塊后仍然存在的局部變量。
//隨后,static在C中有了第二種含義:用來表示不能被其他文件訪問的全局變量和函數(shù)。
為了避免引入新的關(guān)鍵字,所以仍然使用static關(guān)鍵字來表示這第二種含義。

?

3. 基本數(shù)據(jù)類型:shortlongintcharfloatdouble(共6種)

構(gòu)造數(shù)據(jù)類型:數(shù)組、結(jié)構(gòu)體struct、公用體union、枚舉類型enum

空類型void

【short為2個(gè)字節(jié),int為4個(gè)字節(jié),long為4個(gè)字節(jié),float為4個(gè)字節(jié)、

?double為8個(gè)字節(jié),char為1個(gè)字節(jié)(一般情況下)】

【隱式類型轉(zhuǎn)換:short,char → int →unsigned??int → long → double(主干道)?←float】

?

4. sizeof關(guān)鍵字計(jì)算變量所占空間?–?數(shù)組做函數(shù)參數(shù)時(shí),退化為指針,4字節(jié)

??sizeof?(int)*p??-----??sizeof(int) * p = 4p

??再次強(qiáng)調(diào),sizeof不是函數(shù),而是關(guān)鍵字。

?

5. signedunsigned關(guān)鍵字:

//32位的signedint類型整數(shù)其值表示范圍為:-2^31~2^31-1
//8位的signed char類型其值表示范圍為:-2^7~2^7-1
//32位的unsigned int類型整數(shù)其值表示范圍為:0~2^32-1
//8位的unsigned char類型其值表示范圍為:0~2^8-1

??在計(jì)算機(jī)中,數(shù)值是以補(bǔ)碼的形式存儲(chǔ):使用補(bǔ)碼,可以將符號(hào)位與其他位統(tǒng)一處理,同時(shí)減法也可以按加法處理。

?

6. ifelse關(guān)鍵字:

寫if語句時(shí),一般情況下先處理正常情況再處理異常情況,以便提高效率,可讀性也較好;bool一般初始化為false比較好;int,float,指針變量?與0的比較問題(整形可以直接與0比較;float是實(shí)型,不能精確到0;指針變量與NULL)

if(flag) --- bool

if(0 == i) --- int

if(i > -0.000001 && i <0.000001)??--- float

if(NULL == p) ---?指針變量

?

7. switch/case關(guān)鍵字:【解決多分支的問題】

??每個(gè)case語句結(jié)尾加break;最后必須使用default分支。

case后面只能是整形或者字符型的常量或常量表達(dá)式。

?

8. do/while/for關(guān)鍵字:(3種循環(huán)結(jié)構(gòu))

while:先判斷while后面括號(hào)里的值,如果為真則執(zhí)行其后面的代碼;否則不執(zhí)行
do-while:先執(zhí)行do后面的代碼,然后再判斷while后面括號(hào)里的值,如果為真,循環(huán)開始;否則,循環(huán)不開始。用法和while沒有區(qū)別,但相對(duì)較少用。---??至少執(zhí)行一次
for:可以很容易的控制循環(huán)次數(shù),多用于事先知道循環(huán)次數(shù)的情況。

【多重循環(huán)時(shí),最長的循環(huán)放在最內(nèi)層,最短的放在最外層,以提高執(zhí)行效率;循環(huán)不要超過3層嵌套】

?

9. break終止本層循環(huán);continue終止本次循環(huán),開始下一次循環(huán);return終止函數(shù)。

?

10. void關(guān)鍵字:空即是色”---?很強(qiáng)大

?---?函數(shù)返回值的限定;函數(shù)參數(shù)的限定。

任何指針類型都可以直接賦給void *類型,反過來就不行;不能定義一個(gè)void變量。

//void *memcpy(void *dest, const void *src, size_tlen);

//void *memset(void *buffer, int c, size_t num);

能說的比較少,但是void關(guān)鍵字真的是很強(qiáng)大,這點(diǎn)毋庸置疑。

?

11. return關(guān)鍵字:

??---?終止一個(gè)函數(shù)并返回其后跟的值

??【別返回棧內(nèi)存的的指針,因?yàn)樵搩?nèi)存在函數(shù)體結(jié)束時(shí)被自動(dòng)銷毀,會(huì)導(dǎo)致程序錯(cuò)誤】

?

12. const關(guān)鍵字:?----?不是常量,而是只讀變量;用得好的話大大提高程序的效率

const修飾的是只讀的變量,其值在編譯時(shí)不能被使用,因?yàn)榫幾g器在編譯時(shí)不知道其存儲(chǔ)的內(nèi)容。
const推出的初始目的,正是為了取代預(yù)編譯指令,消除它的缺點(diǎn),同時(shí)繼承它的優(yōu)點(diǎn)。

const和define的區(qū)別:const修飾的只讀變量,并且在定義的同時(shí)進(jìn)行初始化;const可以節(jié)省空間,避免不必要的內(nèi)存分配,同時(shí)提高效率;修飾一般變量,一般變量是指簡單類型的只讀變量;修飾數(shù)組;修飾指針;修飾函數(shù)的參數(shù),當(dāng)不希望這個(gè)參數(shù)值被函數(shù)體內(nèi)意外改變時(shí)使用;修飾函數(shù)的返回值,表示返回值不可被改變;在另一連接文件中引用const只讀變量。

【編譯器通常不為普通const只讀變量分配存儲(chǔ)空間,而使將它們保存在符號(hào)表中,這使得它成為一個(gè)編譯器件的值,沒有了存儲(chǔ)與讀內(nèi)存的操作,使得它的效率也很高;const定義的只讀變量從匯編的角度看,只是給出了對(duì)應(yīng)的內(nèi)存地址,而不是像define一樣給出的立即數(shù)】

const M = 3;??int a[M]; ---?錯(cuò)誤的,數(shù)組里面不能是變量,即使是只讀

#define M 3???int a[M]; ---?正確的,預(yù)處理的時(shí)候做宏替換

const?int?*p;//p可變,p指向的對(duì)象不可變

int?const?*p;//p可變,p指向的對(duì)象不可變

int?*const?p;//p不可變,p指向的對(duì)象可變

const?int?*const?p;//指針p和p指向的對(duì)象都不可變

?

13. volatile關(guān)鍵字:?---?判別普通工程師和嵌入式工程師

??防止編譯器優(yōu)化,做嵌入式這行的不認(rèn)識(shí)這個(gè)關(guān)鍵字,就要回家多修煉修煉啦!

?

14. extern關(guān)鍵字:

extern修飾變量或者函數(shù),以表示變量或者函數(shù)的定義在別的文件中。從而提示編譯器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義。

?

15. struct關(guān)鍵字:?---?寫程序的時(shí)候盡量別使用全局變量,而是打包成結(jié)構(gòu)體

??將相關(guān)聯(lián)的數(shù)據(jù)打包成一個(gè)整體;空結(jié)構(gòu)體的大小不是0,而是1;

??柔性數(shù)組:結(jié)構(gòu)體最后的數(shù)組大小未知,內(nèi)核鏈表中用柔性數(shù)組較多。

Type *p=( Type*)malloc(sizeof(Type)+100*sizeof(int));

【柔性數(shù)組與結(jié)構(gòu)體沒關(guān)系,算不上結(jié)構(gòu)體的正式成員。】

struct和class:默認(rèn)屬性不同,struct是public,class是private。

?

16. union關(guān)鍵字:

??大小是聯(lián)合體中最大的成員的大小,而不是所有成員的大小和,此點(diǎn)和結(jié)構(gòu)體不同;同一時(shí)間聯(lián)合體只能訪問數(shù)據(jù)成員中的一個(gè),不能訪問多個(gè)。

用聯(lián)合體可以判斷大小端模式的問題:?

void check(void) {union{inti;intj;} stu;stu.i= 5;return(5 == stu.j):1,0; }

17. enum關(guān)鍵字:

??---?枚舉定義的是一堆常量,比如星期,顏色等

?

18. typedef關(guān)鍵字:?---?起別名,注意與define的區(qū)別,個(gè)人認(rèn)為比define好用

typedef unsigned char uchar;

#define uchar unsigned char

(typedef結(jié)尾加分號(hào),define不需要)

推薦使用typedef,因?yàn)樵诮o指針進(jìn)行替換的時(shí)候,define往往達(dá)不到效果;

#define char* PPP

PPP a,b;//只有a是char*的,b不是,用typedef就不同

?


總結(jié)

以上是生活随笔為你收集整理的C语言——关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。