免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C語言關(guān)鍵字詳解

  相對于其他語言來說,C語言的關(guān)鍵字算是少的了。在C98中關(guān)鍵子總共只有32個(gè),我們來分析一下每個(gè)關(guān)鍵字在C語言中它獨(dú)特的作用。

1、關(guān)于數(shù)據(jù)類型的關(guān)鍵字

  (1) char :聲明字符型變量或函數(shù)
  (2) double :聲明雙精度變量或函數(shù)
  (3) enum :聲明枚舉類型

  enum類型可以增加可讀性,可移植性;在enum中定義的每個(gè)對象,默認(rèn)都是從0開始,當(dāng)然也可以自定義。如下:

enum Color{RED,BLACK,WHITE};
enum Number{ONE=1,TWO,THREE};

  Color中RED=0,BLACK=1,WHITE=2;

  Number中ONE=1,TWO=2,THREE=3;

  (4) float:聲明浮點(diǎn)型變量或函數(shù)
  (5) int: 聲明整型變量或函數(shù)
  (6) long :聲明長整型變量或函數(shù)
  (7) short :聲明短整型變量或函數(shù)
  (8) signed:聲明有符號類型變量或函數(shù)
  (9) struct:聲明結(jié)構(gòu)體變量或函數(shù)

  結(jié)構(gòu)體struct的作用已經(jīng)在上一篇博文中講到,可以用來實(shí)現(xiàn)C語言的封裝,繼承,多態(tài)等等。

  請參考http://www.cnblogs.com/whc-uestc/p/4677414.html
  (10) union:聲明共用體(聯(lián)合)數(shù)據(jù)類型

  union類型可以用來提高內(nèi)存的使用率,如下:


復(fù)制代碼
int main(){
    union Unoin{int a;float b;char *c;};
    union Unoin p;
    p.a = 100;
    /*
        執(zhí)行語句1
    */
    p.b = 10.0;
    /*
        執(zhí)行語句2
    */
    p.c = "hello world!";
    /*
        執(zhí)行語句3
    */

    return 0;
}

復(fù)制代碼

  如果不使用union,我們需要分別定義int,float,cahr*,需要占用12字節(jié)的內(nèi)存空間,但是當(dāng)我們使用union時(shí),只需要占用4字節(jié)即可;但是需要注意的時(shí),我們在上面那個(gè)代碼中執(zhí)行語句2或者3中需要用到int a時(shí),就無法使用union了,必須單獨(dú)定義int a;否則讀出的a值將會錯(cuò)誤的。

  (11) unsigned:聲明無符號類型變量或函數(shù)
  (12) void :聲明函數(shù)無返回值或無參數(shù),聲明無類型指針(基本上就這三個(gè)作用)

2、關(guān)于控制語句的關(guān)鍵字

  循環(huán)語句

  (13) for:一種循環(huán)語句(可意會不可言傳)
  (14) do :循環(huán)語句的循環(huán)體
  (15) while :循環(huán)語句的循環(huán)條件

  條件判斷語句

  (16)if: 條件語句
  (17)else :條件語句否定分支(與 if 連用)
  (18)switch :用于開關(guān)語句
  (19)case:開關(guān)語句分支
  (20)default:開關(guān)語句中的“其他”分支

  在case...switch語句中,當(dāng)一個(gè)條件輸入,從滿足條件的那個(gè)case語句開始執(zhí)行,直到遇到跳轉(zhuǎn)指令(break;return;goto;contine;),所以建議在每條case語句后面加上break,除非你是刻意不那么做的。

  跳轉(zhuǎn)語句

  (21)goto:無條件跳轉(zhuǎn)語句

  用goto語句可以保證程序存在唯一的出口,避免了過于龐大的if嵌套,但是隨意使用goto語句就會對程序帶來很大的隱患(可能會跳過變量的初始化、重要的計(jì)算語句等),影響代碼的健壯性和可讀性。所以不推薦過多地使用。

  (22) continue:結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán)

  (23) break:跳出當(dāng)前循環(huán)

  (24)return :子程序返回語句(可以帶參數(shù),也可以不帶參數(shù))

  在return語句之后函數(shù)中的所有指令都不會執(zhí)行,所以需要確保在return語句之前執(zhí)行完必要的指令。

 3、關(guān)于存儲類型的關(guān)鍵字

  (25)auto :聲明自動變量 一般不使用,因?yàn)楫?dāng)我們聲明一個(gè)局部變量是默認(rèn)就是auto
  (26)extern:聲明變量是在其他文件正聲明(也可以看做是引用變量),一般也需要經(jīng)常使用,因?yàn)樵贑語言里面,全局變量和函數(shù)都是默認(rèn)extern的屬性
  (27)register:聲明寄存器變量,聲明為register的變量是存放在CPU的寄存器里面的,所以讀取速度非??欤菙?shù)量有限,當(dāng)定義的多個(gè)register變量,編譯器多的那些register變量轉(zhuǎn)換為auto變量。
  (28)static :聲明靜態(tài)變量

  a、當(dāng)我們把一個(gè)全局變量聲明為static時(shí):只有它的作用范圍變?yōu)楸驹次募?,也就是屬性由external變?yōu)閕nternal,其它不變;

  b、當(dāng)我們把函數(shù)聲明為static時(shí):它的作用范圍變?yōu)楸驹次募?,也就是屬性由external變?yōu)閕nternal;

  c、當(dāng)我們把局部變量聲明為static時(shí):默認(rèn)初始化值為0,并且只在第一次定義時(shí)初始化;內(nèi)存存儲區(qū)域不再是棧,而是在靜態(tài)存儲區(qū);生命周期不再是所在函數(shù),而是整個(gè)進(jìn)程;其它不變。

4、其它一些關(guān)鍵字

  (29)const :聲明只讀變量

  由const聲明的變量,必須在定義時(shí)進(jìn)行初始化。如下:

const int num = 10;//在定義處初始化,并且變量的值不允許再改變

  既然變量的值都不允許改變,那么這個(gè)變量定義了有啥用?哈哈,用處大著呢。首先在我們定義數(shù)組的時(shí)候,數(shù)組的大小就可以用const定義的常量來表示,這個(gè)就跟#define一樣,但是它是類型安全的,#define是預(yù)處理命令,只是進(jìn)行簡單的字符替換,而編譯器會對const定義的變量進(jìn)行類型檢查;其次,當(dāng)我們需要一個(gè)不再改變的變量時(shí),就可以用const,比如說定義一個(gè)人的性別,自打你一出生就已經(jīng)決定了你的性別,不出意外的話,這輩子都不會改變了,所以就把它定義為只讀的,當(dāng)然有人也認(rèn)為不定義為const也可以的嘛,只要自己不改變它就行,但是如果是那樣的話,就需要人為來控制了,萬一哪天忘了,把它改了怎么辦?所以對于一些只讀或者常量最好用const來定義。

  當(dāng)我們把const與指針變量放在一起的時(shí)候,問題就變得復(fù)雜了。比如我們定義如下:

const int *p1;
int const *p2;
int * const p3;
int const * const p4;

  指針變量p1:const在數(shù)據(jù)類型之前,修飾的是p1所指向的對象,所以p1所指向的對象的值為常量只讀,不能改變,但是p1本身可以改變;

  指針變量p2:const在*之前,這種情況與p1相同;

  指針變量p3:const在*之后,修飾的是變量p3,所以變量p3本身為常量只讀,而p3所指向的對象可以改變;

  指針變量p4:有兩個(gè)const分別修飾變量p4和p4所指向的對象,所以p4本身和p4所指向的對象都為常量只讀,都不可以改變。

  其實(shí)這些也很容易記住,只要看const是在*前還是在*后面,在*前修飾的就是指針?biāo)赶虻膶ο螅?后,修飾的就是指針本身。

  下面來舉個(gè)簡單的例子說明:


復(fù)制代碼
int main(){
    int num1 = 0;
    int num2 = 1;
    int num3 = 2;
    int num4 = 3;
    const int *p1;
    int const *p2;
    //int * const p3; //error(1)
    int * const p3 = &num3;
    //int const * const p4; //error(2)
    int const * const p4 = &num4;
    p1 = &num1;
    //*p1 = 100;//error(3)
    num1 = 100;//此時(shí)*p = 1;
    //p3 = p4;//error(4)
    *p3 = 100;
    //p4 = p3;//error(5)
 
        return 0;

復(fù)制代碼

  在上面代碼中,error(1)和error(2)很容易理解,因?yàn)閏onst在*之后,所以指針p3,p4本身為只讀,在定義時(shí)必須初始化。error(3)是因?yàn)閷τ趐1指針,const在*之前,所以p1所指向的對象不能改變。error(4)和error(5)是因?yàn)閷τ趐3,p4,有const在*之后,所以指針本身只讀,在初始化之后,就無法再改變了。

  (30)sizeof:計(jì)算數(shù)據(jù)類型長度

  很多人不理解sizeof與strlen的區(qū)別:sizeof是運(yùn)算符,而strlen是函數(shù);sizeof計(jì)算的是數(shù)據(jù)類型的大小,而strlen計(jì)算的是字符串的長度;sizeof的參數(shù)既可以是數(shù)據(jù)類型,也可以是變量,而strlen的參數(shù)只能是char*,而且必須是空字符結(jié)尾;sizeof返回值類型為unsigned,而strlen返回值為signed,因?yàn)樗枰祷刎?fù)數(shù)來表示出錯(cuò)情況。

  (31)typedef:用以給數(shù)據(jù)類型取別名

  typedef在程序設(shè)計(jì)里面很有用,當(dāng)一個(gè)數(shù)據(jù)類型很長時(shí)(比如說函數(shù)指針),我們就可以用typedef來選用一個(gè)很合適的名字來替代它;當(dāng)我們使用int,float,double這些類型時(shí),也可以使用自己喜歡并且直觀的名字來重新定義它,這樣,當(dāng)我們以后需要把項(xiàng)目中的float類型換成double類型的時(shí)候,我們就可以直接在typedef上把float換成double就可以,而不需要把所有代碼里面每個(gè)float換成double。
  (32)volatile:說明變量在程序執(zhí)行中可被隱含地改變

  volatile 修飾的變量不允許編譯器對與它有關(guān)的運(yùn)算做任何優(yōu)化;用volatile定義的變量可能會在程序外被改變,所以每次都必須從內(nèi)存中讀取,而不能把他放在cache或寄存器中重復(fù)使用。一般用在以下幾個(gè)地方:

  a、并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)
  b、一個(gè)中斷服務(wù)子程序中會訪問到的非自動變量(Non-automatic variables)
  c、多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量

以上結(jié)論只是個(gè)人的見解與建議,如果上述所說有誤或者大家有不同的見解,歡迎指正與討論。

本文永久更新鏈接地址http://www.linuxidc.com/Linux/2015-08/121240.htm

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
高質(zhì)量C/C++編程(片段)
「初識C語言」C語言保留字(關(guān)鍵字)詳解
用const修飾函數(shù) 以及引起的附加限制:const函數(shù)不能調(diào)用非const的函數(shù)或引用非const參數(shù)
C語言指針詳解
C語言指針終極指南?。ǜ皆敱M圖示和代碼)
有C基礎(chǔ),如何快速過度到C ?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服