第二章 变量和基本类型
2.1基本内置类型
基本内置类型中,因为位数的不同,这些类型所表示的最大最小值也因机器的不同而不同。
即“C++基本数据类型的存储空间依机器而定 。”
类型 | 含义 | 最小存储空间 |
bool | 布尔型 | - |
char | 字符型 | 8bit |
wchar_t | 宽字符型 | 16bit |
short | 短整型 | 16bit |
int | 整型 | 16bit |
long | 长整型 | 32bit |
float | 单精度浮点型 | 6位有效数字32bit |
double | 双精度浮点型 | 10位有效数字64bit |
Long double | 扩展精度浮点型 | 10位有效数字64bit |
C++没有规定每一种数据所占的字节数,但规定了int型数据所占的字节数不大于long int型,不小于short型。
C++的基本数据类型的存储空间实质上随CPU字长的不同而不同 。
C++的编译器有一个不成文的约定:就是根据机器字长来定义int的长度,最能反映代码的效率。但不是所有编译器都遵循这个规定,所以, 想要保证程序中的基本数据类型的值不越界,必须了解你所使用的编译器 。
一般的,如在visual c++中,int占4byte,short占2byte,long占4byte或8byte。
经验:1.在大多数机器上,用整型int进行计数,很少使用short。
2.使用double这种浮点型通常不会出错,它有10位小数,而仅有6位小数的float很可能不够用。
2.2字面值常量
20 //decimal十进制
024 //octal八进制
0X14 //hexadecimal十六进制 //以上均表示十进制的20
通过加一个后缀,改变字面值常量的类型
128u //unsigned
1L //long,这里L大写小写均可,但提倡用大写
3.1415f //单精度float型,这里f大写小写均可,f只可出现在小数后面,整数不可以!
3.1415e0f //表示3.1415*10^0并且是float型
'a' //char
L'a' //wchar_t
转义字符
转义字符 | 意义 | ASCII码值(十进制) |
\a | 响铃(BEL) | 007 |
\b | 退格(BS) | 008 |
\f | 换页(FF) | 012 |
\n | 换行(LF) | 010 |
\r | 回车(CR) | 013 |
\t | 水平制表(HT) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 反斜杠 | 092 |
\? | 问号字符 | 063 |
\' | 单引号字符 | 039 |
\" | 双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 任意字符 | 三位八进制 |
\xhh | 任意字符 | 二位十六进制 |
当然,也可以用ascii码来表示。
如\7 表示 响铃符
字符串字面值"hello world!"占13个字节,最后自动加上一个'\o'空字符
正如宽字符字面值,L"hello world!"为宽字符串字面值,占26个字节,最后自动加上一个"\0"宽空字符结束。
相同类型的字符串字面值可以连接,但字符串字面值可宽字符串字面值连接未定义!
如,可以这样写 cout<<"a mulit-line "
"string literal"
"using concatenation"
<<endl;
注意:分两行书写的字符串字面值必须在第一行末尾加上反斜线\
习题2.10
#include <iostream>
using namespace std;
int main()
{
cout<<"2M"<<endl;
return 0;
}
修改后
#include <iostream>
using namespace std;
int main()
{
cout<<"2\tM\n";
return 0;
}
求2^10
#include <iostream>
using namespace std;
int main()
{
int value=2,pow=10,res=1;
for(;pow>0;pow--) {
res=res*value;
}
cout<<"the result of 2^10 is "<<res<<endl;
return 0;
}
习题2.11
#include <iostream>
using namespace std;
int main()
{
int value,pow,res=1;
cout<<"please enter two numbers(value and power):"<<endl;
cin>>value>>pow;
int pow1;
pow1=pow;
for(;pow>0;pow--) {
res=res*value;
}
cout<<"the result of "<<value<<"^"<<pow1<<" is "<<res<<endl;
return 0;
}
2.3变量
左值和右值
左值可以放在赋值号的左边或者右边,而右值只能放到右量。
左值是变量的地址或者是一个代表对象在内存中的位置的表达式,右值是变量的值,常量或者常变量。
如val1=val2/8 //这里val1是左值,val2是右值!
表达式不可是左值!!
对象是内存中具有类型的区域!
变量名由数字,字幕,下划线组成,并且以字母和下划线开头!!变量名不宜太长,不可为c++中的关键字~!!以下为几个重要的c++关键字:
图片来自http://apps.hi.baidu.com/share/detail/30620027 详解见此网站。
定义对象(初始化)
初始化分为:1复制初始化 如:int a=1024;
2直接初始化 如:int a(1024); //直接初始化更灵活,效率更高!
切记,初始化不是赋值,初始化是创建变量并给他赋予新值,而赋值是擦除原来的值并用新值替代的过程。
内置变量初始化规则:在函数体内定义,自动初始化为零。在函数体外,不进行初始化!!
建议每个内置类型的对象都要初始化!!
类的初始化:1有默认构造函数的,如string默认为空字符
2其它的必须显式的定义
引用reference
Const引用是指向const的引用,非const引用是指向非const的引用!