1、变量和基本类型

类型主要是用来告诉我们数据代表什么意思,对数据该执行什么操作。

1.1 基本数据类型

C++中有布尔型、字符型、整型、浮点型等。(其中整数、字符和布尔的算术类型合称为整型).它与在计算机存储器中的表示方式紧密相关。计算机以位序列存储数据,每位存储0或1.通常在计算机中int存储长度为1个机器字长。

 

 1 #include <iostream> 
 2 using namespace std;
 3 int main()
 4 {
 5     bool bl=true;
 6     char cr='s';
 7     short st=1;
 8     int i=0;
 9     long lg=1;
10     float ft=1.0;
11     cout<<sizeof(bl)<<endl;
12     cout<<sizeof(cr)<<endl;
13     cout<<sizeof(st)<<endl;
14     cout<<sizeof(i)<<endl;
15     cout<<sizeof(lg)<<endl;
16     cout<<sizeof(ft)<<endl;
17     return 0;
18 }

其在计算机中存储的长度为:

1

1

2

4

4

4

1.2 越界处理

当我们给指定类型赋值,但是超过了指定类型的长度,那么编译器就会对其的可能取值数目求模,然后取得所求值。

例如:

 1 #include <iostream> 
 2 #include <iomanip>
 3 using namespace std;
 4 int main()
 5 { 
 6     unsigned char cr='a';
 7     cout<<setw(20)<<(int)cr<<endl;
 8     cr=300;
 9     cout<<setw(20)<<(int)cr<<endl;
10     cin>>cr;
11     return 0;
12 }

对于第6行,根据char的模的值为256,若把数据类型改为signed,输出结果相同,为:

97

44

但是倘若我们的cr的值在第8行若为赋值,那么结果就会有所不同了。如当cr的值为-1时:

对于signed char其值的表示范围为-128-127,那么输出结果为:

97

-1

对于unsigned char其值的表示范围为0-255,那么输出结果为:

97

255

1.3 类型检查

C++是一种静态类型语言,在编译时会做类型检查。在操作时,数据类型以及表达式是否合法是通过编译器检查的,如果不合法,那么编译器就会提示错误,而不会产生可执行文件。所以,在我们使用变量的时候必须首先确定变量的类型。

1.4 初始化

对于变量定义,我们要确定他的类型和标识符(可以是字母、数字、下划线),当然还可以给对象提供一个初始值。初始化变量有两种方式:

  直接初始化 int i(0); 

  复制初始化 int i=0; 

1     string all_nines=(3,'9');//直接初始化,里面通过一个计数器和一个‘9’字符初始化对象。   与第二行的表达式等价。
2     string all_nines="999";//复制初始化
3     cout<<all_nines<<endl;

在以往中经常使用例如int i=0;但是要搞清楚,初始化不是赋值,赋值是擦除对象的当前值,然后再给他赋予新值。直接初始化的语法更灵活且效率更高。对于内置类型的来说,直接初始化与复制初始化几乎没有什么差别。对于类类型有些初始化只能用直接初始化。

1.5 变量的声明和定义

   变量的定义:用于为变量分配存储空间,还可以为其指定初始值。

   变量的声明:只是用来向程序表明变量的类型和名字。可以使用extern关键字声明变量名而不定义它,也就是说extern并没有在内存里开辟空间,只有当extern位于函数外才可以包含初始化式。例如可定义为:extern int i=1;

   程序中可以多次声明,但是只能定义一次。

1 extern int i;//申明但是并不定义
2 int i;//申明

在多个文件中使用的变量都需要与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)。

1.6 引用

非const引用只能绑定到与该引用相同的类型。

const引用可以绑定到不同但相关的类型的对象或绑定到右值。

 1     int ival1=2;     //引用就是别名
 2     double dval=2.3;
 3     int &ival2=ival1;
 4     const int x=2;  //const是指向const对象的引用
 5     const int &x1=x;
 6     const int &x2=x1+ival1; 
 7   //int &val=dval; 非const对象只能引用到同类型
 8     const int &val=dval;
 9     cout<<ival2<<endl;
10     cout<<x1<<endl;

 1.7 typedef名字

typedef可出现在程序的任何位置,其本身并没有引入新的类型,只是现有数据类型的别名。

目的:

隐藏特定类型的实现,强调使用目的。

简化复杂类型定义,便于理解。

允许一种类型用于多个目的,同时使得每次使用该类型的目的更明确。

 

posted @ 2014-12-10 17:58  心绪如泥  阅读(283)  评论(0编辑  收藏  举报