1. 数据类型--有符号数和无符号数之间的转化
含有无符号类型的表达式
unsigned u = 10;
int i = -42;
cout<< i + i << endl;
//结果为-84,计算结果没问题
但若是计算过程为:
cout << u + i << endl;
//结果为4294967264,结果有问题,
有符号数和无符号数计算过程无符号首先会转化为无符号数,
42的二进制表达式为:00000000 00000000 00000000 00101010
反码为:11111111 11111111 11111111 11010101
补码为:11111111 11111111 11111111 11010110(-42)
所以该补码若是表示无符号数,大小为:4294967254,然后加10,结果即为4294967264(相当于32位全1结果为4294967295,然后减去41即为有符号数-42代表的无符号数大小。
2. extern变量
extern生命变量的时候不能对变量赋值,否则就变成了对变量的定义,而不是声明。
extern int i; //声明变量int i
extern int i=32;//定义变量i,而不是声明,已经抵消了extern的作用,此处的i和别处文件中的i不是同一个了
3. 复合类型
引用:引用声明的时候必须被初始化,不能定义引用的引用,同时引用的数据类型必须与被绑定的变量的数据类型保持一致
指针:不能定义指向引用的指针,指针的类型要与所指的对象严格匹配
不存在引用的指针,但存在指针的引用
离变量最近的符号对变量的类型有最直接的影响:int *&r; r是一个引用,是指针的引用,指向int类型
4. const限定符
const对象定义的时候必须进行初始化,同时const变量不管是声明还是以定义,都需要添加extern关键字
const对象存在引用,但是根据const对象的特性,const对象的引用不能用来修改所绑定的const对象
5. 指针和const
const int *i=&p;//这里的p可以是const,此时不能通过i和p来修改p的值;若p不是常量,则不能通过指针i来修改p的值,但是 可以通过其他方式修改p的值
int *const i=&p; //这里指针i本身是一个常量,i只能指向p,无法指向其他地址,但是可以通过i来修改p的值
const int *const i=&p; //这里的指针i本身是一个常量,同时又是指向常量的指针,也就是指针的值本身不能改变,也不能通 过指针i来修改p的值
4万+


&spm=1001.2101.3001.11974&articleId=80835558&d=1&t=3&u=6706eaf01a3f4da0acb452194fcc342c)

被折叠的 条评论
为什么被折叠?



