前言
C++Primer 读书笔记,一个小白的自留地,欢迎大佬批评指正~
2.1 基本内置类型
2.1.1 算术类型
整型和浮点型 带符号类型和无符号类型
如何选择类型
2.1.2 类型转换
bool b = 42; //b为真
int i = b; //i的值为1
i = 3.14; //i的值为3
double pi = i; //pi的值为3.0
unsigned char c = -1; //假设char占8比特,c的值为255 -1+256,最小正数
signed char c2 = 256; //假设char占8比特,c2的值是未定义的
int i = 42;
if(i) //if条件的值将为true
i = 0;
#include <iostream>
int main()
{
bool b = 42;
std::cout << "b = " << b << std::endl;
int i = b;
std::cout << "i = " << i << std::endl;
i = 3.14;
std::cout << "i = " << i << std::endl;
double pi = i;
std::cout << "pi = " << pi << std::endl;
unsigned char c = -1;
std::cout << "c = " << c << std::endl;
signed char c2 = 256;
std::cout << "c2 = " << c2 << std::endl;
return 0;
}
含有无符号类型的表达式
#include <iostream>
int main()
{
unsigned u = 10;
int i = -42;
std::cout << i + i << std::endl;
std::cout << u + i << std::endl; //2^32-42+10 = 4294967264
unsigned u1 = 42, u2 = 10;
std::cout << u1 - u2 << std::endl;
std::cout << u2 - u1 << std::endl;
return 0;
}
2.1.3 字面值常量
转义序列
指定字面值的类型
2.2 变量2.2.1 变量定义
默认初始化
2.2.2 变量声明和定义的关系
2.2.3 标识符
2.2.4 名字的作用域
嵌套的作用域
2.3 复合类型
2.3.1 引用
引用本身不是对象,所以不能定义引用的引用
2.3.2 指针 获取对象的地址
访问无效指针的后果无法预计,因此程序员必须清楚任意给定的指针是否有效。
利用指针访问对象
空指针:
建议初始化所有指针
赋值和指针
void*指针
定义多个变量
指向指针的指针
#include <iostream>
int main()
{
int ival = 1024;
int* pi = &ival;
int** ppi = π
std::cout << ival << std::endl;
std::cout << &ival << std::endl;
std::cout << pi << std::endl;
std::cout << &pi << std::endl;
std::cout << *pi << std::endl;
std::cout << "---------------------" << std::endl;
std::cout << ppi << std::endl;
std::cout << &ppi << std::endl;
std::cout << *ppi << std::endl;
std::cout << **ppi << std::endl;
return 0;
}
1024
00000093F737F9B4
00000093F737F9B4
00000093F737F9D8
1024
---------------------
00000093F737F9D8
00000093F737F9F8
00000093F737F9B4
1024
指向(绑定)指针的引用
#include <iostream>
int main()
{
int i = 42;
int *p = nullptr;
int *&r = p; //r是引用
std::cout << i << std::endl;
std::cout << &i << std::endl;
std::cout << p << std::endl;
std::cout << &p << std::endl;
std::cout << r << std::endl; //p是什么,r就是什么
std::cout << &r << std::endl; //&r和&p也是一样的
r = &i;
*r = 24;
std::cout << i << std::endl;
std::cout << &i << std::endl;
std::cout << p << std::endl;
std::cout << &p << std::endl;
std::cout << r << std::endl;
std::cout << &r << std::endl;
return 0;
}
42
00000034D850F564
0000000000000000
00000034D850F588
0000000000000000
00000034D850F588
24
00000034D850F564
00000034D850F564
00000034D850F588
00000034D850F564
00000034D850F588
总结
如何选择类型?无符号类型
类型转换
避免无法预知和依赖于实现环境的行为
左值引用
引用要初始化,而且还得是对象,指针可以不用,但建议初始化指针
void*指针
指向(绑定)指针的引用:从右向左读