C語言------結構體和共同體


1.結構體是一種構造類型,它是由若干成員組成的,其中每個成員可以是一個基本數據類型或者是一個構造類型。聲明結構體時使用關鍵字struct。

2..聲明一個結構體表示的是創建一個新的類型名,要用新的類名再定義變量,定義方式有三種:

  A.聲明結構體,然后再定義變量。

    struct  Product

    {成員列表};

    struct Product product1;

    struct Product product2;

  B.在聲明結構類型時,同時定義變量。

    struct Product

    {

      char cName[10];

      char cShape[20];

    }product1, product2;

    PS:注意變量的名稱要放在最后的分號前面;定義的變量不是只能有一個,可以定義多個變量 

  C.直接定義結構體類型變量。

    struct

    {

      成員列表

    }變量名列表;

3.在引用結構體的成員時,可以在結構的變量名的后面加上成員運算符"."和成員的名字,例如:product1.cName

4結構體類型與其他基本類型一樣,可以在定義結構體變量時指定初始值。例如:

  struct Student

  {

    char cName[20];

    char cSex;

    int iGrade;

  }student1 = {"HanXue", "W", 3};

  PS:定義的變量后面使用等號,然后將其初始化的值放在大括號中,並且每一個數據要與結構體的成員列表的順序一樣。

5.結構體數組與數組的區別在於,數組中的元素是根據要求定義的結構體類型而不是基本類型。

6.定義一個結構體數組的方式與定義結構體變量的方法相同,也是有三種方式,只是結構體變量替換成數組而已,一般形式為:

  struct 結構體名

  {

    成員列表;

  }數組名;

7.初始化結構體數組的一般形式為: 

 struct 結構體名

  {

    成員列表;

  }數組名={初始化值列表};

8.結構體指針的一般形式為: 結構體類型 *指針名;  struct Student *pStruct;

9.使用指向結構體變量的指針訪問成員有兩種方法,pStruct為指向結構體變量的指針。

  A. (*pStruct).成員名   結構體變量可以使用點運算符對其中的成員進行引用,*pStruct表示指向的結構體變量,因此使用點運算符可以應用在結構體的成員變量上,注意由於點 算符的優先級最高,如果不使用括號把指針括起來的話,則有問題。

  B. 使用指向運算符引用結構成員。pStruct -> 成員名;

10. 假如student為結構體變量,pStudent為指向結構體變量的指針,可以看出以下3種形式的效果是等價的

  student.成員名

  (*pStruct).成員名

  pStruct->成員名

11.在使用“->”引用成員時,要注意分析以下情況:

  (1)pStruct -> iGrade,表示指向的結構體變量中成員iGrade的值;

  (2)pStruct -> iGrade++,表示指向的結構體變量中成員iGrade的值,使用后該值加1;

  (3)++pStruct -> iGrade,表示指向的結構體變量中成員iGrade的值加1,計算后再進行使用;

12.可以將結構體變量的值作為一個函數的參數,使用結構體作為函數的參數有3種形式:

  A. 使用結構體變量作為函數參數 void Display(struct Student stu);

  B. 使用指向結構體變量的指針作為函數參數;void Display(struct Student* stu);

  C.使用結構體變量的成員作為函數參數;Display(student.fScore[0]);

13.在鏈表這種數據結構中,必須利用指針才能實現,因此鏈表中的節點應該包含一個指針變量來保存一下一個節點的地址。

14.malloc函數,void *malloc(unsigned int size)功能:在內存中動態分配一塊size大小的內存空間,函數返回一個指針,指向分配的內存空間,若出錯則返回NULL;

15.calloc函數,void *calloc(unsigned n,unsigned size)功能:在內存中動態分配n個長度為size的連續內存空間數組,calloc返回一個指針,指向動態分配的連續內存空間地址。

16.free函數,void free(void *ptr)功能:使用由指針ptr指向的內存區,使部分內存區域能被其他變量使用。ptr是最近一次調用calloc或malloc函數時返回的值。free函數無返回值

17.共用體看起來很像結構體,只不過將關鍵字有struct換成了union。共用體和結構體的區別在於:結構體定義了一個由多個數據成員組成的特殊類型,而共用體定義了一塊為所有        數據成員共享的內存。

18.需要注意的是,結構體變量的大小是其所包括的所有數據成員大小的總和,其中每個成員分別戰友自己的內存單元,而共用體的大小為所包含數據成員中最大內存長度的大小。

19.在使用共用體時需要注意以下特點:

  A.同一個內存段可以用來存放幾種不同類型的成員,但是每一次只能存放其中一種而不是同時存放所有的類型,也就是說在共用體中,只有一個成員起作用,其他成員不起作用

  B.共用體變量中起作用的成員是最后一次存放的成員,在存入一個新的成員后原有的成員就失去作用。

  C.共用體變量的地址和它的各成員的地址是一樣的。

  D.不能對共用體變量名賦值,也不能企圖引用變量名來得到一個值。

20.利用關鍵字enum可以聲明枚舉類型,這也是一種數據類型。一個枚舉變量包含一組相關的標識符,其中每個標識符都對應一個整數值,稱為枚舉常量。例如定義一個枚舉類型的變量,其中每個標識符都對應一個整數值。enum Colors(Red, Green, Blue) Colors就是定義的枚舉類型變量,在括號中的第一個標識符對應着數值0,第二個對應1,以此類推。每個標識符都必須是唯一的,而且不能采用關鍵字或當前作用域內的其他相同的標識符。

21. 在定義枚舉型變量時,可以為某個特定的標識符指定其對應的整型值,緊隨其后的標識符對應的值加1,例如:enum Colors(Red = 1, Green, Blue),其中Green對應2。

         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM