自定義數據類型
標簽:c++
目錄
一、結構體
定義方法:
結構名 變量名
特點:
- 兩個同類型的結構變量可以相互賦值,但是結構變量之間不能使用“<”,“==”等運算符,如果使用則需要對運算符重載
- 內存分配情況:地址對齊
- 結構的成員變量可以是任何類型的,包括基本類型、結構體、結構體指針等
成員訪問方式:
-
通過結構變量名:結構變量名.成員變量名
-
通過結構體指針:指針->成員變量名 或 (*指針).成員變量
注: 點運算符的前體是變量名,箭頭的是指針(助記:指針很像箭頭)
初始化:
- 定義時按照成員變量的順序和格式列舉初始化
- 用另外一個同類型的結構體初始化
結構數組
結構名 數組名[數組元素個數]
指針和動態內存分配:
指針的用法同一般情況
動態內存分配:
StructName *p;
p = new StructName[N];
結構變量作為函數參數:
-
值傳遞,需要將實參復制到形參,結構體積大的時候效率很低
-
地址傳遞,傳遞指針
-
引用傳遞(c++特有)
二、聯合
定義方法:
union 聯合名
{
類型名1 成員變量名1;
類型名2 成員變量名2;
……
}
特點:
成員變量從相同的起始地址分配內存,對一個成員變量賦值會改變其余成員變量的值
舉例:
#include<iostream>
using namespace std;
union Register
{
unsigned int word;
struct
{
unsigned short L;
unsigned short H;
}data;
};
int main()
{
Register AX;
AX.word = 0x12345678;
AX.data.H = 0x9999;
cout<<hex<<AX.word<<" "<<AX.data.H<<" "<<AX.data.L<<endl;
}
三、枚舉
定義方法:
enum 枚舉類型名{枚舉值1,枚舉值2,……};
枚舉類型名 變量名;
作用:
宏定義的集合
四、用typedef定義數據類型
用法:
typedef 類型名 類型別名;
作用:
簡化變量類型名
typedef void(*myFunction)(int n, char c, const char* s);
myFunction p1;
myFunction p2;