C/C++学习历程汇总

预备篇

编程技术预备知识

二进制、十进制、十六进制

  1. 十进制思想n进制思想的转化
  2. 二进制十进制十六进制的书面表示, 比如:15, 二进制: 0b00001111, 十进制: 15, 十六进制: 0x0F
  3. 进制之间的转化

流程图

  1. 顺序结构
  2. 条件分支结构
  3. 循环结构

常见术语

  1. 编辑器: 用来编写代码的工具,比如vim vscode nodepad nodepad++ sublime text atom
  2. 编译器: 用来将源码装换为库文件和可执行二进制文件的命+令行工具套件, 比如 gcc, g++, cl.exe, clang, clang++
  3. 项目构建: 管理项目源码与编译生成脚本的工具软件, 比如 make, cmake, scons, gradle, maven
  4. IDE: 集成了编辑器编译器调用自动化项目构建自动化的一种功能更强大的软件, 比如QtCreator, XCode, Visual Studio, Clion, Code Blocks, Eclipse

C++开发环境安装

Windows平台环境安装

  1. winddows系统下环境安装(Visual Studio)
  2. WSL(Windows Subsystem Linux)下环境安装

Ubuntu(linux平台)环境安装

1
sudo aptitude install build-essential git cmake qtcreator

macOS平台环境安装(XCode安装)

打开AppStore, 搜索 Xcode, 找到右侧的Xcode 点击 获取, 待 获取变为 安装后, 点击安装

IDE的选择

Windows:

  • Visual Studio Community/Professional/Ultimate (Windows平台开发必备)
  • Visual Studio Code (跨平台可扩展的编辑器, 可以配置成像IDE一样功能强大)
  • QtCreator
  • Clion

Linux:

  • Visual Studio Code
  • QtCreator
  • Clion
  • Code Blocks

macOS:

  • XCode
  • Clion
  • Visual Studio Code
  • QtCreator

入门篇

语法

语句

  1. 使用一部分参数经过特定的计算规则得到特定结果(可以没有结果值)的一句话, 通每行一条语句, 英文分号(;)结尾(仅当前C/C++语言, 部分其他编程语言语句法则不一样,有的无需分号结尾, 有的可有可无)

  2. 示例:

1
和 等于 参数1 + 参数2 +...+ 参数n

C/C++代码

1
2
1 + 2 + 3;
10 * 5 / 2 + 6 / 3;

变量

  1. 当我们需要临时保存记录下某个语句的结果时, 变量就应运而生了, 比如
1
2
int sum = 1 + 2 + 3;
int result = 10 * 5 / 2 + 6 / 3;
  1. 为什么要用变量呢?比如, 你有100元人民币, 早上买早餐用掉10元,中午买午餐又花掉了20元, 晚上没忍住多吃了点, 花了50, 那么请问,你早上、中午、晚上分别剩下多少钱呢?

不用变量时:

1
2
3
4
5
6
7
/// 一开始100RMB

100 - 10; /// 这是早上剩余的

100 - 10 - 20; ///这是中午剩余的

100 - 10 - 20 - 50; ///这是晚上剩下的

现在我们使用变量:

1
2
3
4
5
6
7
int total = 100; /// 一开始的100RMB

total = total - 10; /// 早上用掉10元, 剩下 total - 10 , 然后在吧剩下的值记录到total, 此时的total才是真正意义上的剩下的钱

total = total - 20; /// 在早上剩下的基础上中午再花20元, 剩下的再次记录到total

total = total - 50; /// 中午剩下的钱晚上再划掉 50元

对比发现:

  • 当没有使用变量时, 如果是在同一个概念上的数值有变动, 每次变动都要把完整的变动过程写一遍,变动的次数越多, 书写的过程越繁琐, 如此下去,简直灭绝人性
  • 使用了变量以后, 我们不仅可以把变量当成我们的原始数值一样进行计算, 还能把计算的结果进行保存留到后续的变动,而且不管多少次的变动, 计算表达式的语句也能一直保持很简洁
  1. 变量与变量有时候是会有区别的, 比如你18岁, 身高1.60米, 名字叫二愣子, 这种变量与变量之间的区别叫 变量类型18岁: 这是个整数, 1.60米: 这是实数,二愣子:这是文本也叫字符串

  2. 变量有哪些类型呢? 基本的变量类型有以下几种:

  • 整形: 对应整数
  • 浮点型: 对应实数
  • 布尔型: 表示具有对立属性的状态, 一般可以表示为/, 0 < 1 真, 1 == 2 假
  • 字符型: 用来表示显示在屏幕上给我们看的文本
  1. 变量类型的具体C/C++语言中的类型有哪些呢?
  • 整形: (unsigned ) char/short/int/long/long long
  • 浮点型: float, double
  • 布尔型: bool
  • 字符型: char , wchar
  1. 有啥区别? 每种大类型里面的具体类型之间, 一般都只有存储空间和符号性的区别, 比如
  • 整形:
1
2
3
4
5
char (1字节, -2^7~2^7-1), unsigned char (1字节, 0~2^8-1)
short(2字节,-2^15~2^15-1), unsigned char(2字节, 0~2^16-1)
int (4字节, -2^31~ 2^31-1), unsigned int(4字节, 0~2^32-1)
long/ unsigned long(平台相关,一般不小于4字节,不大于 long long 的字节数)
long long (8字节, -2^63~2^63-1), unsigned long long(8字节, 0~2^64-1)
  • 浮点型:
1
float(4字节), double(8字节)
  • 布尔型:
1
bool(1字节), 只有两个值, true: 真,false: 假
  • 字符型(使用单引号引用起来的单个内容):
    1
    2
    char(1字节): 'A', 'B', '0' ...
    wchar_t(2字节): L'A', L'B', L'C'...
  1. 基本类型之间可否转换?
  • 整形 -> 布尔型:
1
2
0: false
0: true
  • 整形 -> 浮点型:
1
2
3
0 -> 0.0f, 0.0
1 -> 1.0f, 0.0
n -> n.0f, n.0
  • 浮点数 -> 整数, 直接取整数部分, 小数部分会直接丢弃, 因此可能会有精度损失, 比如1.5转化为int以后值为1, 并且不会有像我们数学意义上的四舍五入发生

操作符

  1. 操作符分为 一元操作符、二元操作符、三元操作符, 所谓的元, 就是参数,一元表示只有一个参数…以此类推
  2. 一元操作符: -(取负, a = 1, -a = -1) ~(按位取反, ~0b00000000 = 0b11111111) !(逻辑取反, !true = false, !false = true)
  3. 二元操作符: +-*/<><=>=== (相等)、!=(不等) 、<<(左移或者流输出)、>>(右移或者流输入) 、+= (自增)、-=(自减)、*=/=&(位与)、|(位或)、^(异或)、&&(逻辑与)、||(逻辑或) 、&=|=<<=>>=
  4. 三元操作符: ?:(用法, 条件 ? 值1: 值2, 表达含义: 条件成立时, 返回值1, 不成立则返回值2)

函数

  1. 如果从某些已有的值,计算得到某个结果值, 需要执行的语句超过1条时, 我们要怎么做呢?比如计算一个两个实数和的小数部分:

如果直接把每一组都计算一遍

1
2
3
4
5
6
7
8
9
double sum = 1.5 + 2.1; /// 结果为 3.6
int part = sum; /// 自动忽略小数部分
double result1 = sum - part; /// 3.6 - 3 = 0.6

///...中间还有很多组

double sum = 9.5 + 0.7; /// 结果为 10.2
int part = sum; /// 自动忽略小数部分
double resultn = sum - part; /// 10.2- 10 = 0.2

改为使用函数

1
2
3
4
5
6
7
8
9
10
double calc(double a, double b)
{
double sum = a + b;
int part = sum; /// 自动忽略小数部分
return sum - part; ///
}

double result1 = calc(1.5, 2.1); /// 结果0.6
/// ...
double resultn = calc(9.5, 0.2); /// 结果时0.2

其中的calc便叫做函数, 所谓函数, 其实就是特定流程的多条语句的包装,使用函数可以避免编写大量重读的代码

  1. 函数的声明与定义
  • 函数声明: 告知下文函数的形式, 一般可以编写成
1
返回类型 函数名(参数1类型 参数1名称, ..., 参数n类型 参数名称);

比如上面的calc函数:

1
double calc(double a, double b);

返回类型是double, 有2个参数, 第一个参数名叫 a, double 类型, 第二个参数名叫b, 也是double类型

  • 函数定义: 函数的具体内容, 形式大致为:
1
2
3
4
返回值 函数名(参数1类型 参数1名称, ... , 参数n类型 参数n名称)
{
具体实现细节,...
}

比如上面的 calc函数的定义:

1
2
3
4
5
6
double calc(double a, double b)
{
double sum = a + b;
int part = sum; /// 自动忽略小数部分
return sum - part; ///
}

注意: 同一个函数, 只能定义一次, 但是可以在多处声明

  1. 只有 返回值、函数名、参数的类型、个数、位置完全一致的情况下,才能被称为同一个函数
1
2
3
4
5
6
7
8
9
int add(int a, int b);
// 与
int add(int c, int d);
// 是同一个函数

bool check(double a, int b);
// 与
double check(int a, bool b, char c);
// 不是同一个函数
  1. 在C中, 同一个函数名只能用在一个函数中,不支持使用同一个函数名字定义多个函数, 但是C++中却可以同一个函数名用于多个函数, 叫做函数重载, 比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int max(int a, int b) 
{
return a < b ? b: a;
}

double max(double a, double b)
{
return a < b ? b : a;
}
//虽然用的函数名都是max
//但是
max(1, 2);
// 与
max(2.0, 3.0);
// 使用的不是同一个函数

类型转换

原生数组

指针

枚举、 结构体、联合体

常量

提高篇

进阶篇

高级篇

感谢您对本站的支持.