官术网_书友最值得收藏!

第54章 尾聲(一)

  • 程序媛養成計劃
  • 任煦之秋
  • 2082字
  • 2020-05-26 22:34:05

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

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

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

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;」

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

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

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

指針數組咱們就差不多講完了,接下來就剩最后一點內容,多重指針。今天上午已經講了這么久了,咱們先休息一下,等到下午咱們爭取把結構體和枚舉說一下,最后再簡單地過一遍文件指針,那么C語言的基礎知識咱們就算是學習完了?!?

說到此處,老爹徐徐吐出一口氣。

從第一天開始學習C語言,到現在已經過去了40多個日日夜夜,這突然要結束了,心里突然有種空出一塊的感覺。

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

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

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

以上過程用代碼表示:

int a = 0;

int* p =&a;

int** q =&p;

int*** r =&q;

……

在取值的時候:

*r代表的是q

**r 代表的是p

***r 代表的是a

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

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

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

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

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

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

定義枚舉的格式很簡單:

enum

{

Sunday = 0,

Monday,

Tuesday,

Wednesday,

Thursday,

Friday,

Saturday,

} Week;

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

當然了,我們也可以顯式為所有字段都指定值,只需要保證每個字段的字不重復就可以了?!?

「可是老爹,這樣做有什么意義么?我們完全可以直接用數字0到6來表示一周啊?!?

「的確是這樣,但是你考慮到這個問題沒有,不同的人定義的習慣可能不一樣。比如說我們中國人數數習慣從1開始,那么有可能用1到7來分別表示星期一到星期天。

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

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

但若是使用枚舉,這些問題都迎刃而解了。我們要使用星期幾,只需要使用它的英文名稱就好了。不僅不會混亂,而且見名知意?!?

「那也不一定非得使用這啊,我們還是可以定義常量,使用起來也比較方便啊?!?

我很是不服氣地說道。

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

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

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

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

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

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

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

enum week w = Friday;

或者定義在函數的形式參數上:

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關鍵字,看上去有些多余。

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

typedef enum

{

Sunday = 0,

……

} Week;

聲明變量:

week w = Friday;

String weekToString(Week weekday);」

主站蜘蛛池模板: 义乌市| 芦溪县| 阿拉善左旗| 兴和县| 宿松县| 义马市| 卢湾区| 凤冈县| 巧家县| 罗源县| 察哈| 新源县| 高淳县| 达拉特旗| 乡宁县| 松桃| 商都县| 承德县| 临沧市| 资溪县| 都昌县| 宕昌县| 承德县| 浪卡子县| 剑河县| 通道| 宝山区| 即墨市| 洪江市| 启东市| 黑河市| 积石山| 济南市| 鄱阳县| 砀山县| 呼和浩特市| 海盐县| 新津县| 黎平县| 县级市| 尉犁县|