C++学习笔记
《C++ Primer》个人阅读学习笔记,持续更新中…
1. 环境搭建
参考网址:
https://www.cnblogs.com/cpuimage/p/13121765.html
(1) 下载并安装msys2
https://www.msys2.org/
(2) 打开msys2控制台,输入以下命令进行环境安装
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-gdb
pacman -S mingw-w64-x86_64-cmake
pacman -S mingw-w64-x86_64-make
pacman -S mingw-w64-x86_64-pkg-config
(3) 下载并打开 CLion,进入setting中的Toolchains;点击 [+] 新建MinGW环境并配置,如下图
2. C++基础
(1) 相关术语
- 形参:
parameter ,formal argument - 实参:
argument , actual argument - 编译器:
gcc (GUN Compiler Collection), 预处理、编译、汇编、链接 - 编辑器:
- 集成开发环境:
IDE (Integrated Developed Environment) - 语句块:
block ,花括号包围的语句序列
(2) 向流写入数据
#include <iostream>
std::count << "Enter two numbers:" << std::endl;
std::cin >> v1 >> v2; // 从std::cin中读入两个值,第一个存入v1,第二个存入v2
endl 操纵符(manipulator),结束当前行,并将缓冲区(buffer)中的内容刷到设备中;std 命名空间(namespace):: 作用域运算符// 单行注释/* * */ 注释界定符
(3) 以 istream 对象作为条件的循环
#include <iostream>
int main() {
int sum = 0, value = 0;
while (std::cin >> value)
sum += value;
std::cout << "Sum is: " << std::endl;
return 0;
}
- 如果输入的流是有效的(在该代码中为
int 型参数),则检测成功,条件为 True ; - 如果输入的流是无效的(除
int 型参数外其他类型参数),则检测失败,条件为 False ,跳出循环。
3. 变量和基本类型
(1) 算术类型
类型 | 含义 | 最小尺寸 |
---|
bool | 布尔类型 | 未定义 | char | 字符 | 8 位 | wchar_t | 宽字符 | 16 位 | char16_t | Unicode 字符 | 16 位 | char32_t | Unicode 字符 | 32 位 | short | 短整型 | 16 位 | int | 整形 | 16 位 | long | 长整型 | 32 位 | long long | 长整型 | 64 位 | float | 单精度浮点数 | 6 位有效数字 | double | 双精度浮点数 | 10 位有效数字 | long double | 扩展精度浮点数 | 10 位有效数字 |
- 字节:8 比特
- 字: 32 或 64 比特
float 一个字(32 比特)
(2) 类型转换
(3) 字面值常量
-
以 0 开头的整数代表八进制,以 0x 或 0X 开头的代表十六进制数,例如,可以用以下几种形式表示20: 20 // 十进制 024 // 八进制 0x14 // 十六进制 -
单引号括起来的一个字符成为 char 型字面值;双引号括起来的成为 字符串 型字面值,其结尾位为 '\0' -
一个字符串字面值可以被空格、缩进、换行符分隔
std::cout << "a really, really long string literal "
"that spans two lines" << std::endl;
(4) 变量
-
初始化 创建变量是赋予一个初始值 -
赋值 擦除对象当前值,并用一个新值替代之 -
声明 (declaration) 使文件可以使用别处定义的名字,变量可以被多次声明 -
定义 definition 创建于名字关联的实体,变量只能被定义一次 extern int i; // 声明
extern double pi = 3.1416; // 定义
int j; // 定义
-
变量的作用域 scope
全局作用域 global scope 在整个程序范围内都可被使用块作用域 block scope 在某一语句或者函数内可被使用
(5) 复合类型 compound type
-
引用 reference 并非对象,它只是为一个已经存在的对象所起的另外一个名字 int ival = 1024;
int &refVal = ival; // refVal 指向ival(是ival的另一个名字)
int &refVal2; // 报错:引用必须被初始化
int &refVal3 = refVal // 正确
int i = 1024, i2 = 2048;
int &r = i, r2 = i2; // 正确:允许在一条语句中定义多个引用
int &refVal = 10; // 错误:引用类型的初始值必须是一个对象
-
指针 pointer 存放某个对象的地址
- 是对象,允许对指针赋值和拷贝
- 无须在定义时赋初值
- 不能定义指向
引用 的指针 int ival = 42;
int *p = &ival; // p存放变量ival的地址,指向变量ival
*p = 0; // * 解引用符
double dval;
double *pd = &dval; // 正确:pd存放dval的地址
double *pd2 = pd; // 正确:pd2与pd一样,均存放dval的地址
-
空指针 null pointer 不指向任何对象 int *p1 = nullptr; // 等价于 int *p1 = 0, 最好用这种方法
int *p2 = 0; // 直接将 p2 初始化为字面常量0
#include cstdlib
int *p3 = NULL; // 等价于 int *p3 = 0, 尽量避免使用
int *p1 = nullptr; // 等价于 int *p1 = 0, 最好用这种方法
int *p2 = 0; // 直接将 p2 初始化为字面常量0
#include cstdlib
int *p3 = NULL; // 等价于 int *p3 = 0, 尽量避免使用
|