C++ primer第二章笔记总结归纳(变量和基本类型)

磨磨唧唧玩了两天,想好好学习真难哦

2.1基本内置类型
类型就不一一列举常用的还是那几个,只不过多了一个bool类型,bool类型的取值是真(true)或者假(false)。

计算机以比特序列存储数组,内存中的每个字节将会与一个地址关联起来,比如计算下面的表达式:

//a和b谁大?
char a=5;			//正数的补码是其本身0000 0101
unsigned char b=a-10;	
/*这里看成加法,-10在计算机中的表示形式是1111 0110
0000 0101+1111 0110=1111 1011,由于这里b的类型是unsignd char
代表无符号整数,所以1111 1011是一个正数,则b=251

这个问题是我初始学习c语言的时候遇到的,我比较喜欢转换成比特的形式来做,当然也有更好的方法。 补码是现代计算机使用的编码格式,也是使用补码的形式进行存储

当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模之后的余数.例如8比特大小的unsigned char可以表示0至255区间内的值,如果我们赋了一个区间以外的数,则实际结果是该值对256取模之后的余数,因此上面,把-5赋给8bit大小的unsigned char所得结果是255;当我们赋给带符号类型一个超过它表示范围的数,结果是未定义的。

2.2 变量
这里我们需要了解到的几个概念是定义,赋值,被初始化,声明等。
==变量的定义:==定义的基本形式是类型加上一个或者多个变量名,多个变量名之间用逗号隔开,整个定义以分号结尾,定义能为特定类型的变量申请存储空间,名字必须在定义或者声明之后才能被使用。

当对象在创建时获得一个特定的值称为这个对象被初始化,常常有人会认为初始化是赋值的一种(有的人也包括以前的我),初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象当前的值擦除,而用一个新的值替代。

为了支持分离式编译(该机制允许将程序分割成若干文件,每个文件独自编译),C++语言将声明和定义分开来,声明就是使得名字被程序所知,定义就是创建与名字相关的实体。

extern int i;	//声明i而非定义i
int j;			//声明并定义j
extern int k=10;	//定义k

或许有些同学刚入门的时候会有这样一个问题,当全局变量和局部变量取相同名字的时候到底是哪个变量在起作用,要验证其实很简单,随便写个代码就好了。比如

#include<iostream>
using namespace std;
int i=10;
int main()
{
	int i=20;
	cout<<i<<endl;
	return 0;
}

我们的输出结果为20,C++中大多数的作用域都以花括号分隔。并允许作用域嵌套,因此main函数里面的局部变量i覆盖了全局变量i。

2.3 复合类型
在第二章介绍的复合类型有引用和指针,这两个知识点在校招技术岗笔试面试中也经常问到。
引用: 引用是为对象取了另外的名字,在初始化变量时,初始值会被拷贝到新建的对象中,对于引用,则是程序把引用和它的初始值绑定在一起;引用本身不是对象因此不能定义引用的引用;引用只能绑定在对象上。

int ival=1024;
int &refVal=ival;	//refVal指向ival,refVal是ival的另一个名字
int &refVal2;		//报错:引用必须被初始化
int &refVal3=10;	//错误:引用类型初始值必须是对象
double dval=3.14;
int &refVal4=dval;	//错误:此处引用类型的初始值必须是int对象

指针: 指针是一个比较难以理解的概念,在C语言中也是如此,需要了解的知识点有:
1.指针本身就是一个对象,允许对指针赋值和拷贝
2.指针无需在定义的同时赋值(但是极有可能形成野指针)
3.可以利用操作符&取地址,如果指针指向了一个对象,可以利用操作符*访问该对象

指针与引用的区别
指针与引用的区别

2.4 const 限定符
const的引用:把引用绑定到const对象上,称之为对常量的引用,对常量的引用不能用作修改它所绑定的对象。

int i=42;
const int &r1=i;	//允许const int&绑定到一个普通int对象上
const int &r2=42;	//正确:r1是一个常量引用
int &r3=r1*2;		//错误:r4是一个普通的非常量引用
double dval=3.14;
const int &ri=dval;	//正确

const和指针
与引用一样,也可以令指针指向常量或者非常量,,指向常量的指针不能用于改变其所指对象的值,要想存放常量对象的地址,只能使用指向常量的指针,下面是在学习中或者校招技术笔试或者容易遇到的问题

const double pi = 3.14;	//pi是个常量,它的值不能改变
double *ptr = &pi;		//错误:ptr是个普通指针
const double *cptr = &pi;	//正确:cptr可以指向一个双精度
double dval = 3.14;
cptr = &dval;		//正确,但是不能通过cptr更改dval的值

最麻烦的问题是*位于const的左边或者右边意义不同的问题,针对这种我们最常用的做法是从右向左阅读。

int errNum = 0;
int *const curErr = &errNum;	//*放在const之前,说明指针是一个常量,curErr的指向不能变,但是指向的值可以改变
const double pi = 3.14;
const double * const pip = &pi;	//pip是一个指向常量对象的常量指针,指针的指向不能变,所指向的值也不能改变

好吧这一章先写到这里了,有什么错误或者意见和建议都可以指出来哟

发布了14 篇原创文章 · 获赞 3 · 访问量 1783

猜你喜欢

转载自blog.csdn.net/qq_44708426/article/details/105263865