[C++]結構體、共同體和列舉型別

丫就是熊個貓貓發表於2016-11-30

結構體、共同體和列舉型別

結構體

定義:

將不同種型別的資料有序地組合在一起,構造出一個新的資料型別,這種形式稱為結構體。

結構體是多種型別組合的資料型別。

struct       結構體名

{  成員列表  };

struct   student

{    i

   int  num;

   char  name[20];

   char  sex;

   char  addr[30];

};

定義結構體型別變數的方法

一、先定義結構體型別再定義變數名

truct   student

   {    int  num;

         char  name[20];

         char  sex;

         int  age;

         float  score;

         char  addr[30];

};

結構體型別只是一種資料型別,不佔記憶體空間,只有定義結構體型別變數時才開闢記憶體空間。

# define  STUDENT  struct   student

STUDENT

{    

int  num;

char  name[20];

char  sex;

int  age;

    float  score;

    char  addr[30];

};

STUDENT    student1,student2;

凡是STUDENT的地方都用struct student 機械替換。

二、在定義型別的同時定義變數

struct  結構體名

 {

          成員列表

}變數名列表;  

struct   student

{    

int  num;

    char  name[20];

    char  sex;

    int  age;

    float  score;

    char  addr[30];

} student1, student2;

三、直接定義結構體型別變數

struct

{

     成員列表

}變數名列表;

struct

{    

int  num;

    char  name[20];

    char  sex;

    int  age;

    float  score;

    char  addr[30];

} student1, student2;

1、結構體型別的變數在記憶體依照其成員的順序順序排列,所佔記憶體空間的大小是其全體成員所佔空間的總和。

2、在編譯時,僅對變數分配空間,不對型別分配空間。

3、對結構體中各個成員可以單獨引用、賦值,其作用與變數等同。

格式:變數名 . 成員名    student1 . num

4、結構體的成員可以是另一個結構體型別。

struct  date

{  int   month;

    int   day;

    int  year;

 };

5、成員名可以與程式中的變數名相同,二者分佔不同的記憶體單元,互不干擾。例如,在程式中仍可以定義變數

 int  num;

 

結構體型別變數的引用

1、不能對結構體變數整體賦值或輸出,只能分別對各個成員引用。

 

可以將一個結構體變數整體賦給另外一個相同型別的結構體變數。

         student2=student1;

2、巢狀的結構體變數必須逐層引用。

student1.birthday.day=25;

3、結構體變數中的成員可以同一般變數一樣進行運算。

student1.birthday.day++;       student1.score+=60;

對區域性變數型別的結構體變數初始化

void main(void)

{   struct  student

   {    long int  num;

         char  name[20];

         char  sex;

         char  addr[30];

    }   student1={901031, “Li Lin”, ‘M’, “123 Beijing Road”};

cout<<student1.name<<endl;

輸出:   LiLin

 

關於結構型別變數的使用,說明以下幾點:

1、同型別的結構體變數之間可以直接賦值。這種賦值等同於各個成員的依次賦值。

2、結構體變數不能直接進行輸入輸出,它的每一個成員能否直接進行輸入輸出,取決於其成員的型別,若是基本型別或是字元陣列,則可以直接輸入輸出。

3、結構體變數可以作為函式的引數,函式也可以返回結構體的值。當函式的形參與實參為結構體型別的變數時,這種結合方式屬於值呼叫方式,即屬於值傳遞。

 

結構體陣列

結構體陣列中的每個元素都是一個結構體型別的變數,其中包括該型別的各個成員。陣列各元素在記憶體中連續存放。

一、結構體陣列的定義

struct   student

   {    int  num;

         char  name[20];

         char  sex;

         int  age;

         float  score;

         char  addr[30];

} ;

struct  student  stu[30];

 

 

struct   student

   {    int  num;

         char  name[20];

         char  sex;

         int  age;

         float  score;

         char  addr[30];

} stu[30];

 

二、結構體陣列的初始化

struct   student

   {    int  num;

         char  name[20];

         char  sex;

} stu[3]={ {1011, "Li Lin",'M'}, {1012,"Wang Lan",'F'},

                  {1013,"Liu Fang",'F'};

結構體型別的靜態成員

當把結構體型別中的某一個成員的儲存型別定義為靜態時,表示在這種結構型別的所有變數中,編譯程式為這個成員只分配一個儲存空間,即這種結構體型別的所有變數共同使用這個成員的儲存空間。

<型別>  <結構體型別名>::<靜態成員名>;

其中型別要與在結構體中定義該成員的型別一致,結構體型別名指明靜態成員屬於哪一個結構體。

在結構體中說明的靜態成員屬於引用性說明,必須在檔案作用域中的某一個地方對靜態的成員進行定義性說明,且僅能說明一次。

int  s::id;

說明id的初值為0(靜態變數的預設初值均為0)  

共用體

C++語言中,允許不同的資料型別使用同一儲存區域,即同一儲存區域由不同型別的變數共同表示。這種資料型別就是共用體。

union  共用體名

{  成員表列;

} 變數表列;

union  data  a, b, c;

這幾個成員在共用體變數中存放在同一地址,相互覆蓋,其長度為最長的成員的長度。

共用體變數的引用

不能整體引用共用體變數,只能引用變數中的成員。

a.i    表示為整型

a.ch   表示為字元型

a.f    表示為符點型

共用體變數的特點

1、共用體的空間在某一時刻只有一個成員在起作用。

2、共用體變數中的成員是最後一次放入的成員。

3、共用體變數不能在定義時賦初值。

4、共用體變數不能作為函式的引數或函式值,但可使用指向共用體的指標變數。

5、共用體可以作為結構的成員,結構體也可以作為共用體的成員。

 

列舉型別

如果一個變數只有幾種可能的值,可以定義為列舉型別。

列舉型別就是將變數的值一一列舉出來,變數的值僅限於列舉出來的值的範圍內。

 

1、列舉元素為常量,不可賦值運算。  sun=0;  mon=1;

2、在定義列舉型別的同時,編譯程式按順序給每個列舉元素一個對應的序號,序號從0開始,後續元素依次加1。

enum  weekday  {sun, mon, tue, wed, thu,  fri,  sat};

                               0  ,    1,     2,    3,     4,     5,     6   

3、可以在定義時人為指定列舉元素的序號值。

enum  weekday  {sun=9, mon=2, tue, wed, thu,  fri,  sat};

                               9  ,          2,        3,     4,     5,    6 ,  7  

4、只能給列舉變數賦列舉值,若賦序號值必須進行強制型別轉換。

day=mon ;     day=1;          day=(enum weekday)1;

5、列舉元素可以用來進行比較判斷。

if (workday= = mon)                if (workday>sun)

6、列舉值可以進行加減一個整數n的運算,得到其前後第n個元素的值。

workday=sun;            workday= = tue

workday=(week)(workday+2);

7、列舉值可以按整型輸出其序號值。

workday=tue;

cout<<workday;

 

相關文章