C語言快速入門——引入結構體
事實上,基於我們目前已經掌握的基礎數據類型,已經完全可以做一些小程序了。但想像一下,用一把蘋果去皮刀去切大西瓜會是什麼感受。因此我們將繼續學習C語言中更好的工具,以方便我們未來更好的駕馭程序。
先讓我們嘗試用程序設計語言來描述一下貓的特性。一隻貓可以有自己的名子、年齡、體重、花色...
可是我有一個秘密要告訴你,我養了兩隻貓,你能把它們都描述一下么?不假思索,我們可以這麼做……
我想這麼寫下來,你自己的心裡都過意不去了,如果是三隻貓呢?或許數組是更好的方式。
由於我們沒有學習多維數組,你可能會在catName處犯難,它的對應定義是catName[64][2]。先不要計較這裡的定義,只需要知道它可以保存兩隻貓的名字即可。看起來數組版本的方案還是不錯的,我們甚至可以很容易的使用一個循環來輸出貓的信息了。
也許你有更多的關於貓的主意。比如說,把輸出小貓的信息作為一個單獨的函數,以達到復用的目的。
假定貓還定義有更多的特性,比如說品種,喜好等。這時函數參數列表會持續增長,同時你會發現,這些參數雖然都是關於貓的,但卻是分離的。如果有一個方法可以完整的描述一隻貓,這將是一件幸運的事。
同樣幸運的是,在C語言中,我們可以使用結構體來把相關的數據組織成一個整體,繼而形成一種新的數據類型。由於結構體內部的數據由我們自己組織,結構體類型也被稱為自定義數據類型。
定義一個結構的語法如下:
現在讓我們用struct來定義一種新的數據類型Cat,用來描述貓的特性。
結構體一個優秀的特性,就是允許我們把一個事物相關的特性集中在一起了。留意一下Cat類型中成員的命名,如name,而非catName。我們去掉了前綴cat,因為這個name已經屬於Cat類型了,所以沒有必要再次指定。
我們一再強調struct定義的是一種新類型,與C語言內置類型相似,我們也可以定義這一類型的變數。不同的是,關鍵字struct現在是類型定義的一部分。
為了便於循環處理,我們也可以定義Cat類型的數組,如:
再來看看函數方面,函數聲明或定義的參數,struct關鍵字也不可缺失。
使用結構體變數,函數的參數精簡了。更深層次的一面,就是那些分散的變數完全被一個cat變數所代替,程序變得更加容易組織。你可能迫不及待的想要在printCat函數中列印貓的信息了!我們先讓它「喵」了一聲...
等等,名字與年齡該怎麼訪問呢?
TAG:皮拉夫大王 |