惧留孙网

juliusun.com

惧留孙网 > 在线教程 > WIN32 SDK教程

VC中的变量常量和类型

  我们都知道,每一位(英文名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 C语言窗口程序学习群 本教程内容由 juliusun.com 保留版权,请匆复制传播。

上一页  目录  下一页
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的