C語言的結構體是非常重要的語法,畢竟當初祖師爺發明C語言的其中一個首要任務就是要能提供數據的結構化。題主覺得結構體難,估計是因為初學C語言的緣故。
還記得剛開始接觸C語言的時候,為了描述一個平行四邊形的邊長和對角線長,我定義了四個變量:短邊長a,長邊長b,對角線1長d1,對角線2長d2。
在寫代碼的過程中,發現又要定義一個平行四邊形,于是我不得不又定義了四個變量:a2,b2,d12,d22,結果變量又多又亂,寫代碼很不舒服,太容易弄混了。當時我還想,幸好沒有第三個,第四個平行四邊形。
后來,我發現原來C語言原來還有結構體這種語法,不禁感嘆當初我那種做法實在是太笨了。
C語言中的結構體(復合數據類型)
C語言初學者最先接觸到的數據類型大多都只具有單一的值,例如整數,字符,真假值,小數,在C語言中(或者說編程語言中)這些數據類型通常被稱作基本數據類型。
事實上,C語言中還有復合數據類型
用C語言制定一個描述平行四邊形邊長和對角線長的結構體數據類型。
這個需求是容易實現的,我們用double類型來描述“長度”,那么結構體可以如下定義:
要注意的是,結構體定義完后,大括號后面要用“;”結束。parallelogram并不表示一個變量,它表示一種復合數據類型,structparallelogram{doublea,b,d1,d2;}整體可以看做一個就像int,double一樣的數據類型。那怎么使用它呢?請看下面的C語言代碼實例:
這樣我們就定義好了p1和p2兩個結構體變量。事實上,定義好結構體數據類型之后,可以只使用structparallelogram來定義變量,請看:
這樣定義的p3和p4與上面那種方式定義的p1和p2是一樣的。如果采用上面那種定義方式,parallelogram也可以不寫:
但是這樣就沒有辦法再引用這個結構體類型了,因為它沒有名字。定義好變量后,就可以用“.”運算符來訪問結構體的各個成員了。例如:
很明顯,用結構體來描述平行四邊形的邊長問題,比定義多個double變量方便多了。只需要用structparallelogram定義一個變量,這個變量自己內部就有平行四邊形的短邊長,長邊長,對角線1長和對角線2長了。而且不會弄混,p1和p2的成員彼此是隔離的,使用“p1.”訪問的變量肯定是p1的。這樣一來,要定義再多的平行四邊形都不怕了。
C語言結構體的初始化
我們使用基礎數據類型時,初始化很方便,直接賦值就可以了,結構體怎么初始化呢?請看下面的C語言代碼:
這幾種方式都是可以的,只不過要是使用第一種方式定義,p1必須是局部變量。p1若是全局變量,就只能用常數表達式定義了。
另外需要特別注意的是,一旦變量定義好了,就不能直接用下面種方式賦值了,但是同類型之間可以賦值:
我們用一個完整的例子結束本節,請看下面的C語言代碼:
編譯并執行,得到如下結果:
注意,上面定義的變量a與結構體里的a并不沖突,因為結構體里的a是用過“.”運算符訪問的,編譯器可以區分,它們屬于不同的命名空間。
好了,學會了C語言的結構體,就算是要描述一只貓,也不怕了。
小結
到這里,相信題主應該能發現C語言結構體的方便之處了。事實上,結構體的用處非常大,如果題主閱讀我的文章,應該會發現,結構體和指針結合起來,簡直“毀天滅地”,能夠實現各種各樣好玩的特性。
歡迎在評論區一起討論,質疑。文章都是手打原創,每天最淺顯的介紹C語言、linux等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。