·8· 第1篇Visual C+基础知识 句给枚举变量My_color赋值。 My_color-Red: 5.用户自定义数据类型 在C+中可以用typedef定义新的类型名来代替已有的类型名。用typedef来重新 定义数据类型可以提高程序的可靠性和可移植性。例如,下面的语句中用NTEGER来 代表int类型: typedef int INTEGER 习惯上常把typedef定义的类型名用大写字母表示,以便与系统提供的标准类型标 识符相区别。 基于Windows的程序还使用很多在Windows头文件中定义的结构化的数据类型, 表1-2中列出了在Windows程序设计中使用较繁的结构化的Win32数据类型。 表12在Windows头文件中定义的结构化的Wi32数据类型 数据类型 意义 数据类型 意义 BITMAP 位图结构 MSG 窗口消息 LOGBRUSH 画刷结构 POINT 点结构 LOGFONT 字体结构 RECT 矩形结构 LOGPEN 画笔结构 WNDCLASS 窗口类结构 1.4常量及其定义 常量是指用以表达有固定数值或字符值的单词符号,在程序中不允许修改。 常量可以通过使用关键字cost来定义。例如,下面的语句中定义了一个表示缓冲 区大小的常量。 const int bufSize=1024; 上面这一语句将使bufSize被定义为一个常量并初始化为1024,如果在程序中试图 改变bufSize的值,则将引起一个错误。由于一个const类型的量一经定义后就不能改变 它的值,因此在定义时必须同时初始化。例如,下面的语句中定义了一个double类型的 常量但是没有在定义的同时初始化,这样就会产生错误。 cost double PI /这条语句将产生错误 在C+中,试图把一个常量的地址赋给一个指针同样会使编译器产生编译错误。为 解决这一问题,程序员可以定义一个指向常量的指针。例如: const double pc; pc是一个指向const double型的对象的指针,但pc本身并不是一个常量。也就是 www.TopSage.com
www.TopSage.com
第1章C+基础知识 说,pc可以指向任何一个double类型的对象,但由pc所指向的对象不可以通过pc来改○ 变其值 例如,下面的语句中定义了一个指向常量的指针,通过该指针可以访问不同的常量, 但是不能改变各个常量的值。 pc=&mbBalance: /正确 double d: pc-&d: 1/正确 d=3.14: /正确 ¥pc=3.14: 1/正确 常量还可以分为整型常量、浮点型常量和字符型常量等。例如,对于整数20来说,可 以用下面三种形式表示: 20 /十进制表示 024 /八进制表示 0x14 /十六进制表示 一个浮点常量可以用科学计数法或通常的十进制表示法来表示。在使用科学计数法 时,指数部分以字母E或c开始。一个浮点常量可用字母F或f标识为oat型。如 3.1415926F0.1f0.03e11.0e-32. 在C+中,可被输出的字符常量用单引号括起来。例如 A2'(空格符) 使用不可打印输出的字符、单引号、双引号和反斜线等字符时,可以使用转义字符序 列表示法。C+中的转义字符如表1-3所示。 表1-3C+中的转义字符 字符形式 功能 n 回车换行 横向跳格(即跳到下一个输出区) 竖向跳格 16 退格 回车不换行 走纸换页 la 响铃 反斜杠字符 单引号字符 双引号字符 1? 问号 \ddd 1~3位八进制数所代表的ASCI字符 1~2位十六进制数所代表的ASCI字符 www.TopSage.com
www.TopSage.com
·10 第1篇Visual C+基础知识 一个字符串常量是一个字符数组。组成它的元素除了给出的字符序列外,还包括 个在结尾处的ul字符。这个字符由编译器自行添加,用于标识一个字符串的终结。 1.5变量 在程序执行中,值可变的量称为变量。每一个变量都有一个由程序员给出的变量名, 以此识别每一个变量,同时每一个变量又具有一个特定的数据类型。 在定义变量时,应给出该变量的数据类型和名字,还可以给这个变量赋一个初始值 (不是必须这样做),系统在编译时就会分配给该变量一个存储空间」 一个变量名是由标识符表示的,可以由字母、数字和下划线组成,但必须以一个字母 或下划线开始。在组成变量名的元素中,大小写字母含义是不同的,也就是说,在C+中 是区分大小写字母的。 C+中有一套只供语言专用的单词集,称为保留字集。如预先定义好的类型标识符 都是保留字。作为保留字的单词,不能再作为其他名字使用(如不能作为变量名、函数名 等)。C+中的保留字如表1-4所示. 表1-4C+中的保留字 const enum protected static cast true explici static reak int reinterpretcast typeid ong switch penan late private sizec throw 为了使不同的程序员设计的程序能够很好地互相交流,在基于Windows的VCt+程 序中广泛采用匈牙利表示法来标识变量。匈牙利表示法用小写字母作为变量名的前缀, 以说明变量的数据类型,其余部分描述该变量的意义与功能。 表l-5列举了Windows程序中常用的匈牙利表示法的前缀、类型及其说明。 表1-5常用匈牙利表示法前缀的类型及其说明 前缀 类型 说明 ch char 字符 b BOOL 布尔值 n(I) int 整数 WORD 16位无符号数 LONG 32位有符号数 dw DWORD 32位无符号数 LPTSTR 指向字符串的32位指针 h Handle 窗口对象句柄 www.TopSage.com
www.TopSage.com
第1章C+基础知识 ·11· 1.6指针 一个指针变量所存储的信息是一个对象在内存中的地址。通过指针,可以间接地访 问对象。 1.6.1指针的类型及其定义 每一个指针都有一个相应的类型。该类型用以说明指针所指地址中存放的数据类 型。一个指针所占的内存空间大小与一个内存地址所占空间相等。也就是说,一个it指 针与一个double型指针占用同样大小的内存空间,在定义指针时,应在指针变量名前冠 以星号“”。 1.6.2指针的初始化 一个指针可以被一个具有相同类型的对象的左值初始化。为取得一个对象的左值必 须引入一个新的运算符,这个新的运算符被称为取地址运算符,其符号是“&”。例如,下 面的语句定义一个整型变量并用该整型变量的左值初始化一个指针变量。 int Stu_No-6002; int+ipStu_No=-&.Stu_No/使指针变量ipStu_No取得变量SuNo的地址 一个指针还可以被具有同样类型的另一个指针所初始化。在这种情况下,将不会出 现取地址运算符。 一个指针变量还可以赋以零值,这表明它现在不指向任何一个对象。作为指针变量 的零通常写作NULL。这里还有另外一个指针类型:void,它将允许指针指向未经 const或volatile定义的任意对象。 1.6.3字符串指针 最常用的指针类型是char。这是因为C+中,所有有关字符串的操作都是通过字 符指针来完成的。 字符串常量的类型是一指向该字符串中第一个字符的字符指针。也就是说所有字符 串常量都是类型为char¥的对象。程序员可以说明一个char¥型的变量,并用一个字 符串给它初始化。例如,下面就是一个定义字符串指针并加以初始化的例子。 char *stExample-"The example of string!"; 1.6.4引用类型 引用是一个别名。当建立引用时,程序用另一个变量或对象的名字对它进行初始化。 对引用的改动,实际上是对目标的改动。引用类型是指对给定类型对象的引用,一个引 用类型变量在定义时首先是定义类型标识符,而后是取地址标识符,最后是变量名。其格 式如下: www.TopSage.com
www.TopSage.com
·12· 第1篇Visual C++基础知识 大网 T&标识符=左值表达式 lopSage.com 它建立了标识符与左值表达式所标识的对象之间的映射关系,值得注意的是,对引用 对象的定义必须初始化。例如,下面的语句中定义了两个引用类型,其中第一个是合法的 定义,第二个则是非法的定义。 int value; int&Valuel-value:/合法定义引用类型,声明Value1是对整数的引用,初始化为引用value int&.Value2; /非法定义引用类型 一个引用类型通常被认为是另一变量的别名,在使用时当作某个对象的第二个名字。 所有在引用变量上施加的操作实际上都是作用到被引用的变量上。例如: int r2=r1i 2=10: /这里r2也引用对象a,所以,对象a被更新为10 1.7C+中的控制结构 编写程序时最重要的就是要了解应用程序的控制结构。控制结构是通过控制语句来 实现的。 1.7.1条件语句 C+语言支持如下基本的条件语句:if语句、if.else语句、if.elseif语句、?条件和 switch语句, 1.if语句 if语句用于在程序中有条件地执行某一语句序列,语法形式如下 if(expression) statementl; /当expression为真时,执行statement语句序列 statementn; 2.if.else语句 if.else语句标识根据不同的条件分别执行不同的语句序列,其语法形式如下: i(expression】 statementl; /当expression为真时,执行statementl语句序列 www.TopSage.com
www.TopSage.com