一、C++基本的內置類型
C++ 為程序員提供了種類豐富的內置數據類型和用戶自定義的數據類型。下表列出了七種基本的 C++ 數據類型:
類型 | 關鍵字 |
---|---|
布爾型 | bool |
字符型 | char |
整型 | int |
浮點型 | float |
雙浮點型 | double |
無類型 | void |
寬字符型 | wchar_t |
一些基本類型可以使用一個或多個類型修飾符進行修飾:
- signed
- unsigned
- short
- long
下表顯示了各種變量類型在內存中存儲值時需要占用的內存,以及該類型的變量所能存儲的最大值和最小值。
注意:不同系統會有所差異。
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 //打印int類型的最大值 8 cout << "int類型最大值:" << INT_MAX << endl; 9 //打印int類型的最小值 10 cout << "int類型最小值:" << INT_MIN << endl; 11 //打印int所占字節數 12 cout << "int類型字節數:" << sizeof(int); 13 return 0; 14 }
類型 | 位數(字節) | 范圍 |
---|---|---|
char | 8位,1 個字節 | -128 到 127 或者 0 到 255 |
unsigned char | 8位,1 個字節 | 0 到 255 |
signed char | 8位,1 個字節 | -128 到 127 |
int | 32位,4 個字節 | -2147483648 到 2147483647 |
unsigned int | 32位,4 個字節 | 0 到 4294967295 |
signed int | 32位,4 個字節 | -2147483648 到 2147483647 |
short int | 16位,2 個字節 | -32768 到 32767 |
unsigned short int | 16位,2 個字節 | 0 到 65,535 |
signed short int | 16位,2 個字節 | -32768 到 32767 |
long int | 64位,8 個字節 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 64位,8 個字節 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 64位,8 個字節 | 0 to 18,446,744,073,709,551,615 |
float | 32位,4 個字節 | +/- 3.4e +/- 38 (~7 個數字) |
double | 32位,8 個字節 | +/- 1.7e +/- 308 (~15 個數字) |
long double | 128位,16 個字節 | +/- 1.7e +/- 308 (~15 個數字) |
wchar_t | 2 或 4 個字節 | 1 個寬字符 |
從上表可得知,變量的大小會根據編譯器和所使用的電腦而有所不同。
二、Windows常見數據類型
1 typedef unsigned long DWORD; 2 typedef int BOOL; 3 typedef unsigned char BYTE; 4 typedef unsigned short WORD; 5 typedef float FLOAT; 6 typedef FLOAT *PFLOAT; 7 typedef BOOL near *PBOOL; 8 typedef BOOL far *LPBOOL; 9 typedef BYTE near *PBYTE; 10 typedef BYTE far *LPBYTE; 11 typedef int near *PINT; 12 typedef int far *LPINT; 13 typedef WORD near *PWORD; 14 typedef WORD far *LPWORD; 15 typedef long far *LPLONG; 16 typedef DWORD near *PDWORD; 17 typedef DWORD far *LPDWORD; 18 typedef void far *LPVOID; 19 typedef CONST void far *LPCVOID; 20 21 typedef int INT; 22 typedef unsigned int UINT; 23 typedef unsigned int *PUINT;
1、常見數據類型
WORD: 16位無符號整形數據
DWORD: 32位無符號整型數據(DWORD32)
DWORD64: 64位無符號整型數據
INT: 32位有符號整型數據類型
INT_PTR: 指向INT數據類型的指針類型
INT32: 32位符號整型
INT64: 64位符號整型
UINT: 無符號INT
LONG: 32位符號整型(LONG32)
ULONG: 無符號LONG
LONGLONG: 64位符號整型(LONG64)
SHORT: 無符號短整型(16位)
LPARAM: 消息的L參數
WPARAM: 消息的W參數
HANDLE: 對象的句柄,最基本的句柄類型
HICON: 圖標的句柄
HINSTANCE: 程序實例的句柄
HKEY: 注冊表鍵的句柄
HMODULE: 模塊的句柄
HWND: 窗口的句柄
LPSTR: 字符指針,也就是字符串變量
LPCSTR: 字符串常量
LPCTSTR: 根據環境配置,如果定義了UNICODE宏,則是LPCWSTR類型,否則則為LPCSTR類型
LPCWSTR: UNICODE字符串常量
LPDWORD: 指向DWORD類型數據的指針
CHAR: 8比特字節
TCHAR: 如果定義了UNICODE,則為WCHAR,否則為CHAR
UCHAR: 無符號CHAR
WCHAR: 16位Unicode字符
BOOL: 布爾型變量
BYTE: 字節類型(8位)
CONST: 常量
FLOAT: 浮點數據類型
SIZE_T: 表示內存大小,以字節為單位,其最大值是CPU最大尋址范圍
VOID: 無類型,相當於標准C語言中的void
WINAPI: Windows API的函數調用方式,常見於SDK頭文件中對API函數的聲明中,相當於_stdcall(更嚴格地說,這不是數據類型,而是一種函數調用約定
2、Windows數據類型命名規律
基本數據類型包括:BYTE、CHAR、WORD、SHORT、INT等。
指針類型的命令方式一般是在其指向的數據類型前加“LP”或“P”,比如指向DWORD的指針類型為“LPDWORD”和“PDWORD”
各種句柄類型的命名方式一般都是在對象名前加“H”,比如位圖(BITMAP)對應的句柄類型為“HBITMAP”。
無符號類型一般是以“U”開頭,比如“INT”是符號類型,“UINT”是無符號類型
根據這些命名規律以及自己的經驗看到一些沒見過的數據類型也就能知道它的代表的意思
3、Windows參數簡寫
1、 b 布爾
2、 by BYTE
3、 c chr 或WCHAR TCHAR
4、 n short
5、 i int
6、 x、y 分別表示x 坐標,y 坐標
7、 cx、cy 分別表示x 方向長度和y 方向長度
8、 b 或f BOOL(int),f 代表“flag”
9、 w WORD(無符號short)
10、l LONG 長整數
11、dw DWORD 無符號長整數
12、fn function 函數
13、s string 字符串
14、sz 以0 字節結尾的字符串
15、h 句柄
16、p 指針
17、lpfn 指向函數的長指針
18、cb 字節數
19、lpsz 指向以0 結尾的字符串的長指針
20、g_ 全局變量
21、c_ 常量
22、m_ 類數據成員
23、s_ 靜態變量
24、CS_ 類風格選項
25、CW_ 創建窗口選項
26、DT_ 繪制文本選項
27、IDI_ 圖標ID 號
28、IDC_ 光標ID 號
29、MB_ 消息框選項
30、SND_ 聲音選項
31、WM_ 窗口消息
32、WS_ 窗口風格
33、rc 矩形
4、Windows數據類型與標准C數據類型的關系
查看Windows數據類型的定義可以看到,所有的windows數據類型都是由C數據類型經過類型重定義得到的。
DWORD實質上就是 unsigned long 數據類型,32位無符號整型。
HANDLE類型實質上是void,HANDLE定義為:
typedof PVOID HANDLE;
HANDLE實際上就是一個PVOID,那PVOID又是什么呢?
typeof void *PVOID;
PVOID就是指向void的指針。
所有的Windows數據類型都是通過這種方式在SDK的頭文件中進行定義的,它們都是來源於標准C的