当前位置: 首页 > news >正文

C++常用数据类型和Windows常见数据类型

一、C++基本的内置类型

C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C++ 数据类型:

类型关键字
布尔型bool
字符型char
整型int
浮点型float
双浮点型double
无类型void
宽字符型wchar_t

一些基本类型可以使用一个或多个类型修饰符进行修饰:

  • signed 有符号
  • unsigned 无符号
  • short 短
  • long 长

下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。

注意:不同系统会有所差异。

#include <iostream>

using namespace std;

int main()
{
    //打印int类型的最大值
    cout << "int类型最大值:" << INT_MAX << endl;
    //打印int类型的最小值
    cout << "int类型最小值:" << INT_MIN << endl;
    //打印int所占字节数
    cout << "int类型字节数:" << sizeof(int);
    return 0;
}
类型位数(字节)范围
char8位,1 个字节-128 到 127 或者 0 到 255
unsigned char8位,1 个字节0 到 255
signed char8位,1 个字节-128 到 127
int32位,4 个字节-2147483648 到 2147483647
unsigned int32位,4 个字节0 到 4294967295
signed int32位,4 个字节-2147483648 到 2147483647
short int16位,2 个字节-32768 到 32767
unsigned short int16位,2 个字节0 到 65,535
signed short int16位,2 个字节-32768 到 32767
long int64位,8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int64位,8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int64位,8 个字节0 to 18,446,744,073,709,551,615
float32位,4 个字节+/- 3.4e +/- 38 (~7 个数字)
double32位,8 个字节+/- 1.7e +/- 308 (~15 个数字)
long double128位,16 个字节+/- 1.7e +/- 308 (~15 个数字)
wchar_t2 或 4 个字节1 个宽字符

从上表可得知,变量的大小会根据编译器和所使用的电脑而有所不同。

二、Windows常见数据类型

typedef unsigned long       DWORD;//一个双字等于两个字
typedef int                 BOOL;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;//一个字占两个字节
typedef float               FLOAT;
typedef FLOAT               *PFLOAT;//这样就可以直接用PFLOAT指针类型了
typedef BOOL near           *PBOOL;
typedef BOOL far            *LPBOOL;
typedef BYTE near           *PBYTE;
typedef BYTE far            *LPBYTE;
typedef int near            *PINT;
typedef int far             *LPINT;
typedef WORD near           *PWORD;
typedef WORD far            *LPWORD;
typedef long far            *LPLONG;
typedef DWORD near          *PDWORD;
typedef DWORD far           *LPDWORD;
typedef void far            *LPVOID;
typedef CONST void far      *LPCVOID;

typedef int                 INT;
typedef unsigned int        UINT;
typedef unsigned int        *PUINT;

注:near   (近)指针:16位段内偏移地址 ;far(远)指针:16位段地址+16位段内偏移地址。

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 字节数(count byte)

19、lpsz 指向以0 结尾的字符串的长指针(long pointer size zero)

20、g_ 全局变量

21、c_ 常量

22、m_ 类数据成员

23、s_ 静态变量

24、CS_ 类风格选项(Class Style)

25、CW_ 创建窗口选项(Create Window)

26、DT_ 绘制文本选项

27、IDI_ 图标ID 号 
28、IDC_光标ID 号(C:Cursor)

29、MB_ 消息框选项(Message Box)

30、SND_ 声音选项(Sound)

31、WM_ 窗口消息(Window Message)

32、WS_ 窗口风格(Window Style)

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的

       类型重定义在winnt.h中。

相关文章:

  • C 语言中 void* 详解及应用
  • 句柄是什么
  • #define用法
  • c语言预处理命令
  • C++头文件和std命名空间
  • C++输入输出(cin和cout)
  • C++运算符重载的概念和语法
  • GetLastError,ErrLookUp,$err,hr,$eax
  • 字符集和字符编码(Charset Encoding)
  • 进程
  • Windows中的对象
  • Windows对象、句柄与MFC对象
  • C++结构体
  • C++ 指针运算符( 和 *)
  • C++中 引用与取地址的区别
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 11111111
  • es6要点
  • JavaScript 基础知识 - 入门篇(一)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • nodejs:开发并发布一个nodejs包
  • Python - 闭包Closure
  • Python学习之路13-记分
  • Python中eval与exec的使用及区别
  • Zsh 开发指南(第十四篇 文件读写)
  • 彻底搞懂浏览器Event-loop
  • 初识 beanstalkd
  • 如何合理的规划jvm性能调优
  • 深度学习中的信息论知识详解
  • 算法---两个栈实现一个队列
  • 无服务器化是企业 IT 架构的未来吗?
  • 应用生命周期终极 DevOps 工具包
  • 最近的计划
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Prometheus VS InfluxDB
  • puppet连载22:define用法
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #预处理和函数的对比以及条件编译
  • (1)bark-ml
  • (12)Hive调优——count distinct去重优化
  • (C语言)共用体union的用法举例
  • (一)VirtualBox安装增强功能
  • (转)负载均衡,回话保持,cookie
  • **CI中自动类加载的用法总结
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET业务框架的构建
  • .net与java建立WebService再互相调用
  • /*在DataTable中更新、删除数据*/
  • @JsonSerialize注解的使用
  • @ModelAttribute 注解
  • @RequestBody详解:用于获取请求体中的Json格式参数