juliusun.com
我们都知道,每一位(英文名bit)即0或1,8个位组成一个字节(英文名byte)。这里再认识一个名词,叫字,英文名word,一个字,即一个word,占两个字节(16位)。字word与C语言的unsigned short对应。
在VC里,我们会见到很多标准C语言里没有的类型。并不是VC修改了C语言,而是VC重命名了一些类型,通过宏或是typedef,通过重命名这些类型,让VC代码更加可读。
先说下VC重命名类型的习惯,VC重命名的类型基本都用大写,比如DWORD、BYTE或UINT,不认识没关系,我下面会介绍。
注意:以下数据类型不需要记下来,只要有大概印象即可,在看代码的时候,可以随看随查,这里只不过普及下基础知识。
部分VC新类型就是把标准C语言类型的小写变成大小,如FLOAT就是float,同样,INT就是int,FLOAT就是float。通过查看源码,我们会发现定义方式是通过typedef。源码显示情况如下:
typedef float FLOAT;
typedef int INT;
这种定义方式类型及对应关系如下:
CHAR | char | |
SHORT | short | |
INT | int | |
LONG | long | |
FLOAT | float | |
DOUBLE | double |
还有一部分定义的是无符号的类型,就是把类型名变成大写,并且在最前面加上字母U,代表unsigned无符号,如UCHAR代表unsigned char,USHORT代表unsigned short。定义形式如下:
typedef unsigned char UCHAR;
这种定义方式类型及对应关系如下:
UCHAR | unsigned char | |
USHORT | unsigned short | |
UINT | unsigned int | |
ULONG | unsigned long |
前面介绍了一个名词,叫字,英文名word。这里介绍关于字的类型。一个就是大写的WORD,为unsigned short类型。另一个是DWORD类型,是double word的缩写形式,即双字,占4个字节。
总结如下:
WORD | unsigned short | |
DWORD | unsigned long |
再介绍一个新类型,叫布尔类型。布尔类型的结果只有 真(一般用true表示) 和 假(一般用false表示) 两种。布尔类型不是标准C语言类型,但是VC支持布尔类型,因为VC是Visual C++,可能编译器是出于C++语言考虑的,支持的布尔类型。VC有两种布尔类型定义方式,一种是小写的bool类型,另一种是大写的BOOL类型,注意bool和BOOL不是一样的,不要受前面的误导。在VC里,bool是内置类型,只有true和false两种结果,如果你专注于C语言,可以忘掉bool类型和true、false两种结果,这个类型我很少用;而BOOL在VC里是int类型,定义方式为typedef int BOOL;标准C是不支持布尔类型的,你可以用BOOL当作布尔类型。0为假,非0为真。同样true和false是VC关键字,是bool类型的结果。而TRUE和FALSE是BOOL的两种结果(由于BOOL是int类型,有40多亿种结果,所以BOOL的结果不止TRUE和FALSE)。在VC中TRUE是1,FALSE是0。他们的定义方式是#define TRUE 1;和#define FALSE 0。
BOOL | int |
常量 | 值 | |
---|---|---|
TRUE | 1 | |
FALSE | 0 |
再介绍一个简单的类型,BYTE,BYTE同UCHAR,即unsigned char。
BYTE | unsigned char |
介绍下void类型,这个类型经常用来标示函数参数、函数返回值或指针类型。在VC里大写的VOID同void类型。用的是宏定义#define VOID void。
VOID | void |
还有一部分类型与指针有关,通常以P(表示Point)或LP(表示Long Point)开头(以P和LP开头的类型并不是一一对应的,有的只有P开头或LP开头其中一种)。通常格式如“P类型”或是“LP类型”。如PINT代表指向INT类型的指针,PWORD表示指针WORD类型的指针。为什么指针以P或LP两种形式开头。这是16位时代留下的习惯,16位系统指针有长指针和近指针之分,那时长指针以LP开头,代表long point,而近指针直接以P开头。而桌面计算机早就进入了32位时代,现在很多都是64位,没有长指针或近指针之分,但是命名方法保留了下来。您可以简单的认为,以P开头和以LP开头意义相同。下表列用部分内容:
PVOID/LPVOID | void * | |
PCHAR | char * | |
PSHORT | short * | |
PINT/LPINT | int * | |
PLONG/LPLONG | long * | |
PFLOAT | float * | |
PUCHAR | unsigned char * | |
PUSHORT | unsigned short * | |
PUINT/LPUINT | unsigned int * | |
PULONG/LPULONG | unsigned long * |
再补一种类型,UNICODE字符类型WCHAR,由于ANSI编码的类型char同标准C语言里的char,这里不在列举了。
WCHAR | wchar_t |
再说说字符和字符串指针类型。上面说过,指针类型通常以P或LP开头,同样字符(或字符串)指针也是如此,ANSI类型字符指针类型通常以STR(意为string,即字符串)结尾,UNICODE通常以WSTR(意为widechar string)结尾,如LPSTR是指ANSI字符指针类型,即char *类型,LPWSTR是指UNICODE类型,即wchar_t *类型,同WCHAR *类型。同样也有PSTR(同LPSTR)和PWSTR(同LPWSTR)类型。
PSTR/LPSTR | char * | |
PWSTR/LPWSTR | wchar_t */WCHAR * | |
PTSTR/LPTSTR | TCHAR * |
在C++里有一种常量类型,用const关键字来指定。标准C常量用宏定义。不过VC能编译C++,也允许用const,常量类型的ANSI类型指针为LPCSTR,UNICODE指针为LPCWSTR,TCHAR类型指针为LPCTSTR,这几种类型中间都有个'C'字母,代表Const。
PCSTR/LPCSTR | const char * | |
PCWSTR/LPCWSTR | const WCHAR * | |
PCTSTR/LPCTSTR | const TCHAR * |
注意,上面几种类型不代表指针是常量,而代表指针指向的字符或字符串内容为常量。
VC定义了很多数据类型,笔者只是把其中一小部分给大家列出来。还有很多,遇见时再解释。在没开始学习之前,很多类型是很难理解的,如句柄类型,在C标准里根本没有这种类型,理解起来太难了。暂时先给大家介绍这么多。
视频教程作者QQ:3304576112 交流QQ群:316930386 本教程内容由 juliusun.com 保留版权,请匆复制传播。