首頁 現(xiàn)實

程序媛養(yǎng)成計劃

第五十三章 尾聲(一)

程序媛養(yǎng)成計劃 任煦之秋 2082 2020-05-26 22:34:05

  通過講解main函數(shù),我基本上知道了指針數(shù)組的用法了。

  「還記不得記得我們在講二維數(shù)組的時候,我說二維數(shù)組其實是一個一維數(shù)組,不過這個一維數(shù)組的元素也是一維數(shù)組。在說到為其賦值時,你問我可不可以將數(shù)組賦值給二維數(shù)組的元素,我說按照正規(guī)操作是不行的,但是咱么借助指針數(shù)組就可以實現(xiàn)。

  在講指針和數(shù)組的用法時,我們已經(jīng)知道了,指針是可以指向一個一維數(shù)組的,那么如果是一個指針數(shù)組,自然就可以表示一個二維數(shù)組了。

  int* p[3];

  int a0[]={0, 1, 2, 3, 4};

  int a1[]={5, 6, 7, 8};

  int a2[]={9, 10, 11};

  p[0]= a0;

  p[1]= a1;

  p[2]= a2;」

  「啥,這些一維數(shù)組的長度還可以不一樣???」

  「這是因為指針數(shù)組里面真的就只是存放了一維數(shù)組的指針地址,而數(shù)組的長度對于數(shù)組的指針地址沒有影響。

  但需要注意的是,每個元素指向的是一個真實存在的一維數(shù)組,所以在遍歷的時候要考慮數(shù)組越界的問題。

  指針數(shù)組咱們就差不多講完了,接下來就剩最后一點內(nèi)容,多重指針。今天上午已經(jīng)講了這么久了,咱們先休息一下,等到下午咱們爭取把結(jié)構(gòu)體和枚舉說一下,最后再簡單地過一遍文件指針,那么C語言的基礎(chǔ)知識咱們就算是學(xué)習(xí)完了?!?p>  說到此處,老爹徐徐吐出一口氣。

  從第一天開始學(xué)習(xí)C語言,到現(xiàn)在已經(jīng)過去了40多個日日夜夜,這突然要結(jié)束了,心里突然有種空出一塊的感覺。

  吃了午飯后,我和老爹都習(xí)慣性躺在床上小瞇了一會兒,小弦子就只能睡沙發(fā)了。

  午休之后,老爹便如約開始講多重指針。所謂的多重指針,就是指針里面放指針,這一點和多維數(shù)組倒是有些相似。指針變量和其他變量一樣,都要存放在內(nèi)存中,既然如此,就會有地址。

  如果把指針變量A的地址取出來,賦值給另外一種數(shù)據(jù)類型聲明的變量B,這種數(shù)據(jù)類型就叫做二重指針。以此類推,如果再把B的地址取出來賦值給另外一種數(shù)據(jù)類型聲明的變量C,那么C的數(shù)據(jù)類型就叫做三重指針……

  以上過程用代碼表示:

  int a = 0;

  int* p =&a;

  int** q =&p;

  int*** r =&q;

  ……

  在取值的時候:

  *r代表的是q

  **r 代表的是p

  ***r 代表的是a

  老爹說二重指針除了用來考試或者面試,一般都極少看到。自此,和指針相關(guān)的知識就算是講解完了。

  相比其他知識點,指針的內(nèi)容的確是多了很多。不僅體現(xiàn)在時間上,也體現(xiàn)子在老爹寫的教學(xué)大綱上。從用時來說,以往的知識點從來都不會超過兩個小時,而指針確實足足用了一上午都沒有講完!

  從老爹教學(xué)大綱的篇幅上來說,指針部分的內(nèi)容也是其他內(nèi)容篇幅的兩倍多。

  「什么是枚舉呢?所謂的枚舉,就是將一個變量可能的值一一列舉出來。比如說一周有七天,如果我們用一個變量的來表示一周中的某一天,那么它的可能值就是星期一到星期日。

  同樣,用一個變量來表示月份的話,它的可能值就是一月到十二月。

  如果我們要表示星期和月份的話,就可以使用枚舉。

  定義枚舉的格式很簡單:

  enum

  {

  Sunday = 0,

  Monday,

  Tuesday,

  Wednesday,

  Thursday,

  Friday,

  Saturday,

  } Week;

  你們看,這就定義了一個星期的枚舉類型,我們只指定了Sunday的值為0,后面的如果不指定,編譯器會自動為其賦值為前一個值加一,所以Monday為1……Saturday為6。

  當(dāng)然了,我們也可以顯式為所有字段都指定值,只需要保證每個字段的字不重復(fù)就可以了?!?p>  「可是老爹,這樣做有什么意義么?我們完全可以直接用數(shù)字0到6來表示一周啊?!?p>  「的確是這樣,但是你考慮到這個問題沒有,不同的人定義的習(xí)慣可能不一樣。比如說我們中國人數(shù)數(shù)習(xí)慣從1開始,那么有可能用1到7來分別表示星期一到星期天。

  但是在程序的世界里,一切都是從0開始的,那么也有很多人像我剛才一樣,使用0到6分別表示星期天到星期六。

  如果時間太久了,我們可能就會忘記到底是使用哪種方式來表示的了,況且數(shù)字在使用的時候可讀性也比較差。

  但若是使用枚舉,這些問題都迎刃而解了。我們要使用星期幾,只需要使用它的英文名稱就好了。不僅不會混亂,而且見名知意?!?p>  「那也不一定非得使用這啊,我們還是可以定義常量,使用起來也比較方便啊?!?p>  我很是不服氣地說道。

  「是的,其實在枚舉剛出來的時候,很多人也跟你一樣,畢竟習(xí)慣了使用定義常量的方式,但是后來就慢慢地接受了這種方式。

  你非得要使用常量來定義,也沒錯,但是有些不合群。

  這就好比大夏天其他人都穿著T恤,而你卻穿著大紅色羽絨服到處跑,別人也不能把你怎么樣,畢竟不違法亂紀(jì),也沒有影響別人。所以自然不會有人把你攔住,非要你把羽絨服脫下來。

  其他人只會在背后悄悄議論,說你怎樣怎樣。

  寫程序也是一樣的,畢竟真正開發(fā)的時候代碼不會只交給一個人來寫或者維護。所以在寫代碼的時候就需要注意一些,不能太特立獨行,最好還是采用大家都能夠接受的風(fēng)格。

  吶,定義了枚舉,我們就需要使用它。

  枚舉和其他數(shù)據(jù)類型一樣,可以定義變量,只不過變量的值只能是定義的字段。例如:

  enum week w = Friday;

  或者定義在函數(shù)的形式參數(shù)上:

  String weekToString(enum Week weekday)

  {

  switch (weekday)

  {

  case Sunday:

  return “星期天“;

  case Monday:

  return “星期一“;

  case Tuesday:

  return “星期二“;

  case Wednesday:

  return “星期三“;

  case Thursday:

  return “星期四“;

  case Friday:

  return “星期五“;

  case Saturday:

  return “星期六“;

  default:

  return “錯誤“;

  }

  }

  通過這兩個例子可以看出,我們在聲明一個枚舉變量的時候,還需要加上一個enum關(guān)鍵字,看上去有些多余。

  要解決這個問題,還是需要請typedef它老人家出馬。如果在定義枚舉的時候加上typedef,聲明枚舉變量的時候就不需要再使用enum關(guān)鍵字了:

  typedef enum

  {

  Sunday = 0,

  ……

  } Week;

  聲明變量:

  week w = Friday;

  String weekToString(Week weekday);」

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進入下一章  按 “空格鍵” 向下滾動
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁
返回書頁
指南