变量中的内容
注意无符号变量与有符号变量的相减
例如:
unsigned u = 10;
int i = -42;
std::cout<< u + i <<std::endl; //输出结果4294967264
原因:无符号变量与有符号变量做运算时,会先把有符号变量转换成无符号变量,再做运算。
负数是以补码的形式保存的
42转换成无符号变量的过程:
- 先看作42转换成二进制:101010
- 以32位为例,将其取反1111 1111 1111 1111 1111 1111 1101 0101
注意:第一位是符号位,1表示负,0表示正数 - 因为是补码所以还需要加1:得到4294967254
指针的内容
指针中就需要明白指针常量和常量指针的区别。
口诀:看const和*之间的位置,const在指针前为常量指针,const在指针后为指针常量
int i=5;
int *const cp = &i;
*cp=6;
int j =6;
//cp=&j;
总结:指针常量,本质为常量,所以可以修改指针指向的内容,但不能修改指针的值。
const int* bp = &i;
//*bp=8;
bp=&j;
总结:常量指针,本质是指针,指向的是一个常量,所以不可以修改指针所指向的内容,但可以修改指针的值。
还有一点要注意:
int &r = 0; //是错误的
const int &r = 0; //是正确的