十进制 : decimal
八进制 : octal
十六进制 : hexadecimal
不可打印字符和特殊字符都用转义字符书写,转义字符都以反斜线符号开始,c++语言中定义了如下转义字符:
换行符 : \n
水平制表符: \t
纵向制表符: \v
退格符: \b
回车符: \r
进纸符: \f
报警符: \a
反斜线: \\
问号: \? 单引号: \‘ 双引号: \“
也可以以一下的方式表示任何字符: 八进制: \ooo 十六进制: \xddd
每个定义以类型说明符开始(type specifier)
类型决定了分配给对象的存储空间的大小和可以在其上执行的操作。
initiali
变量定义指定了变量的类型和标识符,而定义时指定了初始值的对象被称为是已初始化的initialized。
c++支持两种初始化变量的形式:
复制初始化(copy-initialization)
直接初始化(direct-initialization)
int ival(22);
int ival=22;
注意区别:初始化不是赋值。
.
int month=9,day=7;
int month=09,day=07;
这两个定义不同。前者定义了两个int型变量,初值分别是9和7,后者也定义了两个int型变量,其中day被初始化为八进制值7;而month的初始化有错:试图将month初始化为八进制值09,但八进制数字范围为0~7.所以出错。可以修改为:int month=011,day=07;
变量初始化规则:
内置类型变量是否初始化决定于变量定义的位置:
在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量不进行自动的初始化。
类类型变量的初始化:
每个类都定义了该类型的对象可以怎样初始化,类通过定义一个或多个构造函数来控制类对象的初始化,如果定义某个类的变量时没有提供初始化式,则会通过默认构造函数来实现初始化。
eg:
std::string global_string;
int global_int;
int main()
{
int local_int;
std::string local_string;
//...
return 0;
}
上面的例子中globa_string 和 loca_stirng的初始值都是空字符串,global_int的初始值是0,local_int没有初始值。
声明和定义
在程序中变量可以声明多次,但是只能定义一次。
可以通过extern关键字声明变量名而不定义它。如:extern int i;//declares but does not define i
int i; //declares and define i
只有当extern声明位于函数外部时,才可以有初始化式。
如:
extern double pi=3.1416;//definition
extern double pi; //ok:declaration not definition
extern double pi=3.1416;//error:redefinition of pi
我们经常在c++中见到:extern “C”是使得c++可以调用用c编写的库文件的手段,并提示编译器使用c的方式来处理函数。
example:
extern std::string name;说明std::string变量name在程序的其他地方定义。
std::string name(”extern 1“);定义了std::string变量name,并将name初始化为“extern 1”。
extern std::string name(“extern 1”);定义了std::string变量name,并将name初始化为“extern 1”,但这个语句只能出现在函数的外部(name是一个全局变量);
名字的作用域:
c++程序中,每个名字与唯一的实体相关联。用来区别名字的不同意义的上下文称为作用域(scope),一个名称可以和不同作用域中的不同实体相关联。
以下程序:
#include <iostream>
int main()
{
int sum=0;
for(int val=0;val<=10;val++)
sum+=val;
std::cout<<"sum of 1 to 10 inclusive is "<<sum<<std::endl;
return 0;
}
程序定义了一个名为main的函数,以及两个名为val和sum的变量,main定义所有的花括号之外,在整个程序可见。定义在所有函数外部的名字具有全局作用域(global scope),可以在程序的任何地方访问。sum定义在main函数的作用域中,在整个main函数中都可以访问,但在main函数之外则不能。sum具有局部作用域(local scope),名字val定义在for语句的作用域中,只能在for语句中使用,不能在main函数的其他地方使用,它具有语句作用域(statement scope);