[C++]結構體、共同體和列舉型別
結構體、共同體和列舉型別
結構體
定義:
將不同種型別的資料有序地組合在一起,構造出一個新的資料型別,這種形式稱為結構體。
結構體是多種型別組合的資料型別。
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;
相關文章
- C++ 結構體struct和共同體union的區別C++結構體Struct
- 結構體-簡單列舉型別——植物與顏色結構體型別
- 類中的結構體或列舉等型別的前置宣告結構體型別
- 結構體,列舉,聯合結構體
- Partial類、列舉、結構體結構體
- 【四】使用列舉和結構來建立值型別型別
- 【C++】資料型別-列舉型C++資料型別
- C++ 列舉型別介紹C++型別
- 關於C++列舉型別C++型別
- iOS學習筆記44 Swift(四)列舉和結構體iOS筆記Swift結構體
- 列舉型別型別
- 資料結構複習-01enum列舉型別資料結構型別
- 10-列舉型別和流型別
- C++特別數的和(列舉)C++
- ENUM列舉型別型別
- java列舉型別Java型別
- java 列舉型別Java型別
- MATLAB(3)資料型別二(結構體和…Matlab資料型別結構體
- C++ - tcp網路傳輸如何傳送結構體型別C++TCP結構體型別
- Swift列舉,結構體,類,擴充套件,協議Swift結構體套件協議
- Java列舉型別的使用和原理Java型別
- 巨集定義和列舉型別的區別型別
- C/C++列舉enum分別列印輸出列舉子和列舉值的方法C++
- Java - Enum 列舉型別Java型別
- c語言基礎筆記DAY7_結構體共用體列舉C語言筆記結構體
- c++結構體、共用體(聯合體)C++結構體
- 關於結構體型別的學習結構體型別
- C++中結構體與類的區別C++結構體
- C++結構體排序C++結構體排序
- 【C++】構造資料型別--陣列C++資料型別陣列
- java中的列舉型別Java型別
- JavaSE基礎:列舉型別Java型別
- mysql之ENUM列舉型別MySql型別
- Rust的列舉型別EnumRust型別
- Enum列舉型別實戰總結,保證有用!型別
- C++ protected許可權成員以及類和結構體區別C++結構體
- 【c++】結構體sort排序C++結構體排序
- C++語法-結構體C++結構體