色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

為什么要用C語言中的結構體?我感覺它有些難,不用的話有什么后果?

傅智翔2年前16瀏覽0評論

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等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。