(15)'c++:COMPLETE REFERENCE' 第一部分 第二章(表达式) 第七、八节

变量初始化

      可以在变量声明的时候直接赋值。格式如下:

      type variable_name = value;

      例如:

      char ch = 'a';
      int first = 0;
      float babance = 123.23;

      全局变量和静态本地变量的赋值仅仅会在程序启动的时候进行一次。局部变量(不含静态局部变量)会在声明它的代码块每一次启动的时候都重新初始化。未经初始化的局部变量在第一次赋值前值是不确定的。未经初始化的全局变量和静态局部变量自动被初始化为零。

常数

      常数的数值是固定的,不能被程序改变。常数可以是任意基本数据类型。常数也称为literals。

      字符常数用单引号括起来,比如,'a'和'%'。C语言和c++都定义了宽字符(用来保存非英语的其它语言),这些宽字符是16位的。要定义宽字符可以使用宏L。例如:

wchar_t wc;
wc = L'A';

      这里wc被定义为宽字符变量,并赋值为A。宽字符类型的类型定义修饰符为wchar_t。在C语言中,wchar_t在头文件中定义,不是内建数据类型。而在c++中,wchar_t是内建数据类型。

      整型常数就是没有小数部分的数字,例如,10、-100。浮点型常数是含有小数点和小数部分的数字,例如,11.23。c++还允许使用科学计数法来描述浮点数。

      浮点数类型有两种:单精度、双精度。对基本数据类型使用类型修饰符还可以产生多种不同的新的数据类型。默认情况下,编译器将常数按照可以存储它的最小的兼容的数据类型来处理。因此,假设整型是16位,默认情况下常数10会设定为int而103000会设定为long。尽管常数10可以用char来存储,但是编译器还是将10处理为整型,因为整型才与常数10兼容。这种默认编译规则有一个例外,就是浮点型常数都会被默认为双精度浮点数处理。

      大部分程序中默认的编译规则是合用的,但是也有例外,所以我们可以通过加后缀的方式来给常数设置最准确的数据类型。拿浮点型常数来说,如果不加后缀,编译器将会默认其为双精度浮点型。在常数后加F则告诉编译器该常数应做为float类型处理,加L则视为long double 类型。

      对于整型常数来说,加后缀U则代表该常数应被编译器按照无符号数处理,加后缀L则按照long类型处理。下面看一些例子:

Data Type                  Constant exemples
int                        1  123  -124
long int                   35000L  -34L
unsigned int               1000U  987U
float                      123.23F  4.34e-3F
double                     123.23  -0.98765432
long double                1001.2L

十六进制和八进制常数

      有时使用8或者16进制会比使用传统的10进制法则要容易一些。8进制的数字是0到7,8进制里的10和十进制里的8有相同的意义。16进制的数字除了0到9外还增加了a到f这6个字母,分别对应十进制意义的10到15,例如,16进制中的10代表十进制意义的16。因为这两种进制最常用,所以c++允许使用这两种数制定义常数。16进制的数必须以0X开始,8进制的数则必须以0开始。例如:

int hex = 0x80;    /* 128 in decimal */
int oct = 012;     /* 10 in decimal */

字符串常量

      c++支持字符串常数,它们用双引号括起来。例如,“this is a test”就是一个字符串。在一些简单的示例程序中,你也可以见到许多含有printf()函数的语句,这些语句往往用到字符串常量。尽管C语言允许使用字符串常量,但是并不支持string数据类型,而c++也一样,只是定义了string类。

      我们不能把字符串和字符的概念混淆。一个字符是用单引号括起来的,如'a'。而"a"则是一个字符串,它仅有一个字符a。(注:书中这个部分没有写到,其实它们在存储上体现了最本质的区别。字符串“a”实际上存持为两个字符,字符a和字符0。)

转义字符常量

      用单引号将字符括起来对于大部分可打印字符来说是有效的。但是还有少数字符,例如回车并不能通过键盘输入到字符串中。c++定义了特别的以反斜杠开头的转义字符常量换码规范。如表2-2所示。你可以使用这些带有反斜杠的代换码来代表它们对应的ASCII码值,这样就增加了可移植性。下面的示例程序运行后将会先换行然后打印制表符号(一种类似于空格但长度较长的空符号),随后再显示“this is a test”。

#include <stdio.h>

int main( void )
{
    printf( "/n/tThis is a test." );

    return 0;
}

表2-2   反斜杠代换码
Code                         Meaning

/b                           Backspace 退格
/f                           Form feed
/n                           New line 换行
/r                           Carriage return 回车
/t                           Horizontal tab 水平制表符
/"                           Double quote 双引号
/'                           Single quote 单引号
/0                           Null 空字符
//                           Backlash 反斜杠
/v                           Vertical tab 垂直制表符
/a                           Alert
/?                           Question mark
/N                           Octal constant 八进制常数
/xN                          Hexadecimal constant 十六进制常数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值