學習是有境界的,下面以C語言中的結構型為例簡單分析。
第一種境界:理解了。
結構型是自定義數據類型,與C語言中基本的數據類型如int的作用相同,用于定義變量。(變量是內存中存儲單元的標識,C語言中通過變量使用計算機的內存。)
結構型只是通過對已有數據類型的組合產生的新的類型。定義一個結構型的變量,實際上是定義了多個基本的變量,但這些變量屬于一個集體。
結構型可以做參數,也可以有結構型指針變量,但是因為結構型變量僅是一個代表,包括了多個變量,使用時(輸入輸出、參與多種運算時)必須具體到成員變量。
在定義結構型時可以包含指向自身的指針類型。構成鏈表的多個結構型變量在邏輯上就有了先后順序,并且可以用循環處理了。
第二種境界:比較了。
結構型與數組相似。
數組是大家比較熟悉的數據類型,也用于定義變量。
數組也是通過對已有數據類型的組合產生的新的類型。定義一個數組變量,實際上也是定義了多個變量,這些變量屬于數組這個集體。數組元素的類型相同,而結構型成員變量的類型可以任意。
數組做參數時會退化為指針類型。兩個數組變量之間不能相互賦值,而兩個結構型變量之間卻可以,即使結構型的成員變量有數組。數組在使用時也必須具體到數組元素。
結構型中可以有數組,數組的類型可以為結構型。
第三種境界:思考了。
數組變量之間為何不能相互賦值,而兩個結構型變量之間卻可以?
數組變量之間相互賦值在技術上沒有任何問題,因為兩個結構型變量之間就可以相互賦值。數組間不能相互賦值是在設計C語言時基于某種考量而故意為之的。問題變成了,C語言中為何這樣設計呢?
這樣做有什么好處呢?
效率高。數組做參數時退化為指針類型,原本要傳遞的大量數據現在只需傳遞幾個字節的數據就可以了,既高效又省空間。
另外,即使同樣為整型數組,但長度可能不同,要保證兩個數組相互賦值時不出錯也太累了。
數組與結構型本質上不同。
數組算作數據結構,所屬元素在邏輯上有次序關系,可以用循環依次處理各個元素。
結構型只是多個數據的包裝,所屬成員僅表示同屬一個集合,沒有次序關系。
?