大家好
欢迎继续学习C++语言程序设计
下面我们来介绍
数据类型常量和变量
我们要能够在程序中表示数据
使用数据
那么就要能够将现实中的
一些数据反映到程序中来
那么C++程序
支持哪些数据类型呢
它支持的数据类型
包括整数类的 浮点数类的
也就是实数类的
还有字符 还有布尔类型
也就是逻辑值
程序中的数据呢
包括常量和变量
所谓常量就是在程序的
整个运行过程中
它的值都不允许被改变的量
那么变量顾名思义
就是它的值在程序的运行过程中
是可以改变的
而且往往是需要改变的
那么整数类型的数据呢
实际上是一大类
分成好多种不同的整型
基本整数类型是int类型
int类型它的字节数
也就是一个int类型
能有多少个字节
这个在C++标准中并没有规定
它是与机器字长相关的
我们也称它为基本整型
那么除此之外呢
还可以按照有符号和无符号之分
我们知道现实中
我们用整数表示的数据
有些数据它是有可能正
有可能负的
而有些数据那肯定就
不可能是负值
那么在有些情况下
如果我们知道这个数据
它不可能取负值的话
我们就可以用
C++里面的无符号整数
它有unsigned这样一个前缀
可以说明这个整数类型
是无符号的
那么相对来说呢
另外一种就是有符号的 signed那么有符号这个关键字呢
经常就省略不写
默认是有符号的
按照它表示数据的范围
也就是所算的字节数不同
它又分成短整型short
和长整型long
和长长整型long long类型
分成这样一些类型
那么在C++标准中并没有规定
每一种类型
每一种整数类型必须占多少字节
它只是规定了它们之间的
一个关系
也就是short类型
它不会宽于基本整型
而long long long类型
它不会窄于基本整型
而每个不同的编译器呢
实现的时候采用的方案
可能会不一样
那另外呢 字符类型在C++中
本质上它里面存放的也是整数
我们第1章讲过
字符数据在计算机内部
是按编码表示的
那么一个字符编码
实际上我们也就可以认为
它是一个整数
大多数系统里面呢
是按ASCII码来编码的
每一个单个的字符占一个字节
ask码是一个七位二进制码
那么一个字节是8位
刚好放得下一个字符的编码
基本数据类型中
还包括了一组实数类型
我们称它为浮点类型
因为实数在计算中
都是用浮点方式表示的
有基本的浮点类型double
双精度的 单精度的float
还有long double
同样C++标准也没有规定
它们各自占多少个字节
只是float的字节数
不应该超过double
long double字节数
不会少于double
然后不同的系统呢
也可能会有不同的实现
那么当我们要存储字符的时候
当然首选这个char类型
是character的缩写
它是字符类型
是单字节的数据类型里面
正好存放一个字符的编码
另外呢还有字符串
在C++中有字符串常量
也就是双引号里面的一串字符
是字符串常量
但是C++的基本数据类型中
没有字符串变量
那内容可变的字符串放在哪儿呢
怎么表示和存储呢
在C语言中是用字符数组
来存放字符串的
在第6章我们会介绍
C++也继承了这一点
所以我们把双引号里面的字符串
另外还有用字符数组
存放的字符串变量都称作
C风格的字符串
C风格的字符串在C++中呢
已经不鼓励使用了
那么C++中
用什么样的变量来存放字符串呢
在C++的标准库里面
有一个String类
我们可以用这个类的对象
来存放字符串
而且这个类提供了很多
非常有用的字符串操作功能
这些也会在第6章
详细的给大家介绍
还有一类数据呢
是表示逻辑值真假的
我们叫它布尔类型
那么布尔类型的数据
它的取值只能是真或者假
就是true或者false两种
这张表上列出来了
在C++中的基本数据类型
以及它们占的字节数
还有它们的表示数据的范围
并不是所有系统里面都是这样的
所以这只是特定的编译环境下
它是这样的一种规定
那么同学们如果用不同的
编译环境的话
你可以去测试一下
或者看一下你编译器的说明书
就知道在你用的系统里面
这些数据类型
它们分别占多少字节
表示范围是多少
接下来我们来看一下
各种类型的常量
所谓常量呢
就是在程序的执行过程中
它的值始终不可变的量
那么什么是始终不可变的量
首先
就是我们直接写出来的文字常量
比如说我们写出来
单引号中的一个字符
或者一个数字
那么既然已经写在这儿了
就是它了
是不可能再被改变的了
这就是文字常量
整数类型的常量呢
它又分十进制 八进制
和十六进制形式的
那么十进制的常量
可以由0到9这些数字
以及它们的组合构成
当然八进制的整数常量
文字常量里面
就只会出现数字0到7
那么十六进制的呢
除了数字0到9以外
从10开始就用字母了
就是A了
A B C D E F合起来
那么这些就是
不同的进制的整数常量
那整数 比如十进制的整数
它有可能是正数
有可能是负数
正数那就是它绝对值本身了
如果是要表示
十进制的一个负整数常量
那就在常量之前
加一个负号就可以了
在常量之后呢
我们还可以写后缀
后缀U表示unsigned
L表示常整数long
还有其他的后缀
大家可以看一下这个地方的说明
自己写程序的时候试着用一用
那么浮点类型的常量
也有两种表现形式
一种是小数形式
我们熟悉的有整数部分
小数点 小数部分
但是对于特别大和特别小的数呢
我们还可以采用另外一种形式
就是我们熟悉的
这种科学技术法的形式
带这里我们叫它指数形式
前面一部分呢
是它的尾数部分
然后是十的方次是指数部分
那么字符常量就是单引号
括起来的一个字符
它在内存中的存储形式
应该存的就是这个字符的ask码
那有些字符属于特殊字符
在屏幕上没办法显示的
比如说响铃 比如说回车
你打一个回车字符
它达到换行的效果了
那么这些字符怎么表示呢
我们可以用这种表里面给出的
这个转译字符来表示
字符串常量呢
又分成C风格的字符串
以及我们以后要讲的
这个string类的对象
它也可以是常对象
也可以有常量 也可以有变量
那最简单的这个C风格的字符串
是怎么构成的呢
它的形式上
就是双引号里面的一串字符
它在内存里面的存储形式是什么
是字符的ask码依次连续存放
在最后的末尾用一个0
作为结束标记
那么哪怕你的字符串里面
只有单个字符
它末尾也是有一个0
作结束标记的
比如说双引号里面的a
和单引号里面的a它就是不同的
双引号里面的a
是一个字符串
它有一个字符
还有一个0作结束标记
而单引号a
就只表示这一个单独的字符
那么通过在字符串常量
前面加前缀呢
也可以改变这个字符串常量
它的类型
那么大家可以参考这张表
有了常量呢
我们还需要变量
很多时候我们需要把常量
存放到变量中去
更多的时候呢
这个变量是在运行的时候
用来接收计算结果
用来接收用户输入的数据的
变量是在程序的运行过程中
它的值可变的量
实际上呢变量也就是一个名字
结合到一组内存单元
我们的程序要用内存单元
去存放数据 怎么用呢
当然可以用地址
确实C语言
C++语言都可以用地址
我们后面会讲
但是用地址毕竟不是很方便
所以在高级语言中
有一种通用的办法
就是用变量名
可以用定义变量的方式
来使用内存空间
在定义变量的时候呢
也可以同时给变量进行初始化
定义变量首先是要规定
这个变量它属于什么类型的
这样的编译器也就知道
要给它多少字节的空间
那么得到这个字节空间以后
它的初始值是什么状态呢
根据这个变量所在的位置不同
它的初始状态会不一样的
如果是在所有函数之外
定义的变量它叫全局变量
如果不给它初始化
它会自动的有一个基础的初始值
比如说数值型的它会是0
这个在第5章我们还会详细介绍
如果是在函数体内部的局部变量
你定义的时候不给它初始化
它的值就是不确定的
可能是垃圾数据
所以在定一个变量的时候
对变量进行初始化
是一个很好的习惯
在C++中呢
初始化一个变量
有四种可用的形式
一种是用等号一样的符号
表示用右边的值去初始化
左边的变量
另一种是用圆括号
在定义变量之后接一个圆括号
圆括号之中给出变量的初始值
还有我们可以用大括号
用大括号也有两种方式
那么这个是初始化列表的形式
使用这种初始化列表的形式呢
这种初始化过程
就不允许有数据丢失
什么叫数据丢失呢
比如说你用double类型
去初始化一个int类型
那么肯定就有数据丢失了
至少它的小数部分是丢失掉了
那而且double类型的表示数据
范围更宽
也许连整数部分在int里面
都放不下呢
所以你要用初始化列表的
这种大括号的形式呢
你就不能有这样的情况发生
我们前面介绍过有文字常量
实际上如果只用文字常量
有时候并不方便
比如说我们在程序里面
可能需要用一个圆周率pi
可能开始我们想用3.14
那在程序写好以后
可能因为精度的要求
我们想提高精度
就把pi统一改成3.14159
那这种情况下
你能在程序的各个地方都保证
同步都做修改吗
哪个地方如果没有改的话
那整个前后所用的数据
就不一致了
所以在这种情况下呢
我们可能选择用符号常量更方便
所谓符号常量
它就像定义变量一样
也可以定义
然后给它进行初始化
它也有名字
我们看这一举的例子
但是它与变量相比较呢
前面多了一个const来修饰
表示这个名字它的定义过程
虽然跟变量一样
要跟一组内存空间来结合
定义之后呢
可以用这个名字来访问
这组内存空间
但是有了这么一个const
这种访问就是只读的了
它只能用 不能修改
那么好 只能用不能修改
那它的值在什么时候获得呢
当然你不能在定义之后
再从键盘输入值去给它
必须在定义的时候就给它初始值
如果定义的时候
你不给它初始值 系统会报错的