C++常用数据类型和Windows常见数据类型
一、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的