《C++primer》第二章读书笔记(基本内置类型、变量与、复合类型)

第二章:变量与基本类型

基本内置类型

C++的基本内置类型包括了:算术类型(字符、整型、布尔、浮点等)和空类型(void)。
他们的机器实现:
首先理解三个概念
· 比特(bit):又叫位,计算机以比特序列存储数据,它的值非0即1。
· 字节(byte):是可寻址的最小内存块,占8位比特,其与一个char的大小相同。
· 字(word):储存的基本单位,大小为4或8个字节。
下表为不同算术类型在不同机器上的所占大小。

算术类型32位机(单位:字节)64位机(单位:字节)
char11
short22
int44
long48
long long88
float44
double88
*48

对于整形而言,其取值范围是:如果无符号[0, 2(n*8)-1];如果有符号[-2(n*8-1), 2(n*8-1)-1]。(n为字节数)。
在类型转换时,有几点需要注意,见以下代码:

bool b = 100;			//b的值为true(非0均为true,0为false)
int i = b;				//i的值为1(bool类型true为1,false为0)
i = 3.77;				//i的值为3(采用舍弃小数点后的方法)
double d = i;			//d的值为3.0(自动补上小数点后的值)
unsigned char c = -1;	//c的值为255(负数转换为无符号)

转义序列一般以\开头,常见的有\\; \t; \n等,或者\加1至3位八进制的数字\115(表示字母M),还可以\x后加1至n个十六进制的数\x4d(也表示字母M)。
std::cout<<"\115\x4d!" \\输出MM!

变量

变量是一个具名的可被程序操作的储存空间,在C++中,变量可与对象互换使用。
初始化
· 对象在创建时获得一个特定的值,这个对象就被初始化了。
· 初始化与赋值不同,初始化是创建变量时赋予一个初始值;赋值则是把对象当前值擦除掉以一个新值替换。
· 方式int i = 0; int i(0); int i{0}这三种都可以,最后一种为列表初始化,其在有丢失信息风险 时会报错,例如int i{1.1}
声明与定义
· 声明:使名字为程序所知,规定了变量的类型与名字。需要关键字extern且不得显示初始化。extern int i;
· 定义:创建与名字关联的实体,其包含变量的名字、类型、并且在这里会申请储存空间。int i; int j = 1; extern int k = 1
· 一个变量可被声明多次,但其只能被定义一次。
作用域
每个变量都有作用范围,其始于变量的声明语句,结束语作用域末端。
在作用域嵌套时,内部作用域的变量会覆盖外部作用域的同名变量。

复合类型

这里的复合类型只讲了引用和指针两种
引用(reference)
· 引用不是对象,它只是为已存在的对象起的另外的名字
· 引用只可以绑定在对象上,故没有引用的引用,同时对引用的所有操作都是在绑定的对象上进行的。

int i = 10;
int &r = i;	//定义一个引用r
int &r1;	//err:引用必须初始化
r = 1;		//等价于 i = 1;

指针(pointer)
· 指针是一个对象,它的值是其它对象的地址。

int *p;			//定义一个指针p
int i = 10;		
int *p1 = &i;	//定义一个指针p1并把i的地址赋值给p1
double *p2 = &i;//err:类型不匹配

由于指针是一个对象,故存在指向指针的指针与指针的引用。
引用不是对象,所以一旦定义无法改变,与其访问的对象绑定了。
指针是对象,它可以随意改变,可以改变地址,也可以改变地址里存的值。

int i = 10;
int *p = &i;	//p为i的指针,p的值是i的地址
int** pp = &p;	//pp是p的指针,即指针的指针,故pp的值是p的地址,对pp两次解引用可以获取i,即**pp==i
int*& r = p;	//r是一个指针的引用,故对r的操作就是对p的操作
//如何辨别是指针的引用,从右向左阅读先读到&证明是引用,而后证明是int类型指针的引用

操作符
在指针和引用这里频繁的出现&*这两个操作符,他们的具体含义如下
· &:在等号左边的时候,他表示一个引用int &r = i,在等号右边的时候,它表示取地址int *p1=&i
· *:在类型名后边用于声明一个指针int *p1, p2, *p3;//p1 p3是指针,p2不是,在表达式中表明取值(解引用)*p1 = 10
简单来说,除了定义引用与指针,*表示取值,&表示取址。
空指针
空指针不指向任何对象,用nullptr表示。
· 在所有指针声明时尽量初始化他们,否则可能会出现运行错误而且极难排查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值