C 結構體

在C語言中,當我們需要把一些數據放在一起的時候,我們常會用到結構體這麼個東西,用struct把數據包裝在一個內存空間內。結構體內我們可以存放各種類型的數據和變量,除了常見的int、char、數組,以及指針等等,甚至還可以是其他的結構體。

結構體由結構成員、結構類型和結構變量組成 。其中結構成員是最小的單位,即結構體內設定的多個變量。一個單個的結構體是一個結構類型,由多個結構變量組成。結構變量是在結構體定以後,通過聲明進行實例化的結構類型。與結構類型不同的是結構變量有對應的變量名。

關於結構體的賦值:

  1. 最常見的是用大括號{}直接給明值。按定義結構體時設置的變量順序。

  2.  {. 屬性 = ...}  這種方式可以選擇式的進行賦值。對未進行賦值的結構成員,給默認值0。

引用結構體時,務必使用:  結構變量 . 結構成員 的格式。切記中間的屬性符" . "

對於結構體,還有一種指針的用法,叫做結構指針。struct xxx . *p = & xxx     當使用結構指針時,我們也有不同的方法引用結構體中的數值:第一種:(*p).xxx;第二種:p->xxx

由於這種用法,使得我們在使用函數時,也可以使用一種新的返回類型struct。當定義這種類型的子函數時,返回值爲一個結構體指針。這種做法在寫數據結構時很常見。

既然能夠作爲返回值,當然也可以作爲函數中的參數進行傳遞。不過需要說明的是:當作爲函數參數進行傳遞時,它的運行本質是在子函數內新建一個結構體,然後將傳遞的結構體內所有數值傳遞到這個新建的結構體內。所以所做的修改並不會影響原結構體。

也有一種數組,叫結構數組,數組的每個單元存放的是一個結構體。

最後說明:

  1. 結構成員所在的地址不一定是連續的。結構類型佔用的內存空間大小不一定等於結構成員所佔用的內存空間大小(只大不小,且爲最長結構成員所佔內存空間大小的整數倍)
  2. 屬性符" . "運算優先級高於指針" * ",所以運算時注意括號的使用
  3. " . " 和 " -> " 的區分。 " -> "左側一定是指針
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章