C++ Primer学习第二天
来源:互联网 发布:shell脚本编程实例 编辑:程序博客网 时间:2024/05/19 12:15
第二章 变量和基本类型
1、 类型确定了数据和操作在程序中的意思。
比如:i = i + j; 的具体含义取决于i和j的类型。如果是int型的,则这就语句表示的是普通的“+”运算。如果i和j都是某一个类的对象,那么这条语句表示的就不是普通的“+”运算了,而是由该类定义的“+”操作。
对于内存中的一块数据,要知道它的具体意义,必须知道它的类型。
比如: 下面的内存块中
地址 数据
736424 0 0 0 1 1 0 1 1
736425 0 1 1 1 0 0 0 1
736426 0 1 1 0 0 1 0 0
736427 0 0 1 1 1 0 1 1
如果地址为736425的字节的类型是8为无符号整数,那么就可以知道该字节表示整数112。如果这个字节是ISO-Latin-1字符集中的一个字符,那它就表示小写字母q。虽然两种情况的位相同,但归属于不同类型,解释就不同。
2、C++中的算术类型
类型 含义 最小存储空间
bool 布尔型 ——
char 字符型 8位
wchar_t 宽字符型 16位
short 短整型 16位
int 整型 16位
long 长整型 32位
float 单精度浮点数 六位有效数字
double 双精度浮点数 10位有效数字
long double 扩展精度浮点数 10位有效数字
c++标准规定了每个算术类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。事实上目前int类型的存储空间一般都是32位的。
对于整型,包括int、short、long都默认为带符号数。就是说,如果你使用int、short、long声明了一个变量,那么这个变量默认是带符号数。要想声明无符号数,需要使用unsigned。比如:unsigned int a;声明了无符号数a。
由于各种类型的存储空间不同,它们所能表示的数值范围也就不同,存储空间越大,该类型所能表示的数值范围就越大。比如由32位的unsigned long型能够表示的数值范围是0——【(2的32次方)-1】,而16位的unsigned short能够表示的数值范围是0——【(2的16次方)-1】。如果把【(2的32次方)-1】这个数值赋给一个unsigned short类型的变量a,a肯定不能接受,因为它表示不了,它没那个能力。怎么办呢。目前大多数编译器的处理办法是:编译器会将该值(【(2的32次方)-1】)对unsigned short类型的可能取值数目取余。然后把取余的结果赋给变量a。也就是这个操作:【(2的32次方)-1】%(2的16次方)。
3、变量初始化规则
如果我们在定义变量时没有初始化该变量,那么系统有时候会帮助我们进行初始化。
对于内置类型变量来说,如果该变量是在函数外定义的,那么系统会把该变量初始化为0;如果该变量是在函数内定义的,系统不进行自动初始化。
对于类对象来说,如果没有使用构造函数去显示的初始化这个对象,就使用默认构造函数去初始化。
4、const限定符
使用const定义常量。
常量必须在定义时初始化,并且不能修改。
常量默认为文件的局部变量,也就是说,常量默认只能被自身所在的文件所访问,不能被其它文件访问。(对于非常量来说,如果在其它文件中做了声明extern,在其它文件中是可以访问它的)。如果要使const变量能够被其它文件访问,必须显示的指定它为extern。就是说在声明这个常量时要在前面加上extern。比如下面的应用:
//file_1.cc
//define and initializes a const that is accessible to other files
extern const int buffSize = 1000;
//file_2.cc
extern const int buffSize;//use buffSize from file_1
//uses buffSize defined in file_1
for(int index=0;index!=buffSize;++index)
..........................
5、引用
引用就是定义了变量的一个别名
int a = 1;
int &aa = a;
aa = 2;
std::cout<<a<<std::endl;
上面程序的结果是:2
意思就是说:对引用的操作就是对引用所指向的对象的操作。上例中我们为引用aa赋值2,就是对aa所指向的对象a赋值2,所以显示a的结果是2。
引用必须在定义是初始化,这点与const相同。引用所指向的对象不能也不可能更改。就是说一旦你把aa指向了a,就不能也不可能把aa执行其它的变量了。对于这一点,大家看下面的例子:
int a = 1,b = 2;
int &aa = a;
aa = b;//这句话的意思不是改变aa所指向的对象,而是给aa所指向的对象也就是a赋值。
aa = 3; //如果此时aa指向的是a,那么a=3,b=2,如果此时aa指向b,那么a=1,b=3
std::cout<<"a="<<a<<std::endl;
std::cout<<"b="<<b<<std::endl;
运行结果是:a=3;b=2;
这说明aa一直是指向a的,aa=b这条语句并没有更改aa所指向的对象。
const引用是指向常量的引用。不能把常量赋给一个非const引用。比如
const int val = 1024;
const int &refval = val; //ok,both reference and object are const
int &ref2 = val; //error,nonconst reference to a const object
这些就是我今天学到的,请大家指错。
StandMyGround(永远的菜鸟)
2008-5-22
- c++primer 学习笔记(第二章)
- C+Primer+Plus学习笔记-第二章
- C++Primer学习笔记第二章
- C++ Primer学习第二天
- C Primer Plus学习笔记----第二章C语言概述
- C++primer 第二章
- C++primer 第二章
- c++primer第二章
- C++ Primer Plus学习:第二章 开始学习C++(1)
- C++ Primer Plus学习:第二章 开始学习C++(2)
- 《C++Primer》学习笔记3--:第二章(P42-P65)
- c++Primer学习笔记之七:第二章课后习题
- C++primer第五版第二章学习笔记
- C++primer(第五版) 第二章 学习笔记
- c++primer第二章习题
- C++primer 第二章习题
- C Primer读书笔记第二章
- C primer plus 第二章
- 一个单选框Applet小程序
- 用托管C++编写自定义Web组合控件
- RedHat Linux 调整显示 分辨率 方法
- Doodle 4 Google 2008年美国站比赛优胜者揭晓
- 从别人那找的56的源码网站(有价值!)
- C++ Primer学习第二天
- 免费主题讲座:PHP行业分析及入门介绍
- 关于国际化问题
- 客户端生成EXCEL报表
- 利用MS Reporting Services与C#生成报表
- 有关 Session 操作的几个误区
- net use命令详细解释
- 解决eclipse安装maven插件后启动出现警告的问题
- .NET 2.0中的企业库异常处理块