1. 注释
写法1:// 单行注释内容
写法2:/* 多行注释内容 */
2. 变量
作用:给一段指定的内存空间起名,方便操作这段内存
语法:数据类型 变量名 = 初始值;
3. 常量
作用:用于记录程序中不可更改的数据
#define 宏常量:#define 常量名 常量值;
const修饰的变量:const 数据类型 常量名 = 常量值;
4. 关键字
作用:关键字是C++中预先保留的单词(标识符)
注意:关键字不能用于定义变量名/常量名,否则会产生歧义

5. 标识符命名规则
作用:C++规定给标识符(变量、常量)命名时,有一套自己的规则
- 标识符不能是关键字
- 标识符只能由字母、数字、下划线组成
- 第一个字母必须为字母或下划线
- 标识符中字母区分大小写
- 尽量做到见名知意的效果,方便自己或他人的阅读
6. 数据类型
6.1 整型:
- short(2字节)
- int(4字节)
- long (Windows为4字节,Linux为4字节 或 8字节)
- long long(8字节)
6.2 实型(浮点型)
单精度 float(4字节)
双精度 double(8字节)
6.3 字符型 char(1字节)
作用:字符型变量用于显示单个字符
语法:char 变量名 = 'a';
注1:使用单引号,不要使用双引号
注2:字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元,测试代码如下:
`char ch = 'a';
cout << (int) ch << endl;`
6.4 字符串型
C风格:char 变量名[] = "字符串值";
C++风格:string 变量名 = "字符串值";
注意如果想输入/输出字符串,记得包含头文件:#include <string>
6.5 布尔类型 bool (1字节)
7. sizeof关键字
作用:利用sizeof关键字可以统计数据类型所占内存的大小
语法:sizeof(数据类型 / 变量)
8. 转义字符
作用:用于表示一些不能显示出来的ASCII字符
常用:\n、\\、\t

9. 数据的输入
作用:用于从键盘获取数据
关键字:cin
语法:cin >> 变量
举例:
int a = 0;
cout << "请输入一个整型变量:" << endl;
cin >> a;
cout << a <<endl;
10. 运算符
10.1 算术运算符:用于处理四则运算

10.2 赋值运算符:用于将表达式的值赋给变量

10.3 比较运算符:用于表达式的比较,并返回一个真值/假值

10.4 逻辑运算符:用于根据表达式的值返回真值/假值

11. 程序流程结构
C/C++支持最基本的三种程序运行结构:选择结构、循环结构、跳转结构
11.1 选择结构
(1)if语句
形式1:
if(条件){
条件满足执行的语句
}
形式2:
if(条件){
条件满足执行的语句
}else{
条件不满足执行的语句
}
形式3:
if(条件1){
条件1满足执行的语句
}else if(条件2){
条件2满足执行的语句
}else if(条件n){
条件n满足执行的语句
}else{
前n种情况都不满足执行的语句
}
(2)三目运算符
语法:`表达式1 ? 表达式2 : 表达式3`
解释:如果表达式1的值为真,则执行表达式2,并返回表达式2的结果;反之执行表达式3,并返回表达式3的结果
(3)switch语句
` switch(表达式){
case 结果1:执行语句; break;
case 结果n:执行语句; break;
......
default:执行语句; break;
}
11.2 循环结构
(1)while循环结构
`while(循环条件){
循环语句
}`
(2)do...while循环结构
注意:与while的区别在于do...while会先执行一次循环语句,再判断循环条件
do{
循环语句
}while(循环条件)
(3)for循环结构
for(起始表达式; 条件表达式; 末尾循环体){
循环语句
}
11.3 跳转结构
(1)break语句
作用:用于跳出选择结构/循环结构
使用的时机:
- 出现在switch条件语句中,作用是终止case并跳出switch
- 出现在循环语句中,作用是跳出当前的循环语句
- 出现在嵌套循环中,跳出最近的内层循环结构
(2)continue语句
作用:在循环语句中,跳出本次循环中余下尚未执行的语句,继续执行下一次循环
(3)goto语句
作用:可以无条件跳转语句
语法:goto 标记;
解释:如果标记的名称存在,执行到goto语句,会跳转到标记的位置

12. 一维数组
(1)定义方式:
数据类型 数组名[数组长度];数据类型 数组名[数组长度] = {值1,值2......};数据类型 数组名[] = {值1,值2......};
(2)一维数组名称的用途
- 可以统计整个数组占用的内存空间为:
sizeof(数组名);单位是字节 - 可以统计第一个元素占用的内存空间为:
sizeof(数组名[0]);单位是字节 - 可以获取数组在内存中的首地址:即数组变量的值
13. 二维数组
(1)定义方式:
数据类型 数组名[行数][列数];数据类型 数组名[行数][列数] = {``{值1,值2......},{值1,值2......},......};数据类型 数组名[行数][列数] = {值1,值2......};数据类型 数组名[][列数] = {值1,值2......};
(2)二维数组名称的用途
- 可以统计整个二维数组占用的内存空间为:
sizeof(数组名);单位是字节 - 可以统计二维数组第一行占用内存空间为:
sizeof(数组名[0]);单位是字节 - 可以统计二维数组第一个元素占用的内存空间:
sizeof(数组名[0][0]);单位是字节 - 可以获取二维数组在内存中的首地址:即数组变量的值
14. 函数
14.1 作用:将一段经常使用的代码封装起来,减少重复代码
14.2 语法:
返回值类型 函数名 (参数列表){
函数体语句
return 返回值;
}
14.3 调用:函数名(参数);
14.4 注意:进行值传递时,如果形参发生变化,并不会影响实参。【值传递:即函数调用时实参将数值传入给形参】
14.5 函数的分文件编写
- 作用:让代码结构更加清晰
- 一般有4个步骤:
Ⅰ. 创建后缀名为.h的头文件
II. 创建后缀名为.cpp的源文件
Ⅲ. 在头文件中写函数的声明
Ⅳ. 在源文件中写函数的定义
15. 指针
15.1 作用
- 可以通过指针间接访问内存;
- 可以利用指针变量保存地址
15.2 指针变量
定义语法:数据类型* 变量名;
注意:指针也是种数据类型:数据类型*
int a = 10;
int *p;
p = &a; // 指针指向数据a的地址
cout << *p << endl; // *解引用
15.3 空指针
-
定义:指针变量指向内存中编号为0的空间
-
用途:初始化指针变量
-
注意:空指针指向的内存是不可以访问的
int* p = NULL; //指针变量p指向内存中编号为0的空间 cout << *p << endl; // 访问空指针报错,因为内存编号0~255为系统占用内存,不允许用户访问
15.4 野指针
定义:指针变量指向非法的内存空间
注:空指针和野指针都不是我们申请的空间,因此不要访问。
15.5 const修饰指针
const修饰指针有三种情况:
-
const修饰指针 --常量指针
-
const修饰常量 --指针常量
-
const既修饰指针,又修饰常量
int a = 10; int b = 10; //1. const修饰的是指针,指针指向可以改,指针指向的值不可以更改 const int* p1 = &a; p1 = &b; //正确 //*p1 = 100; 报错 //2. const修饰的是常量,指针指向不可以改,指针指向的值可以更改 int* const p2 = &a; //p2 = &b; 报错 *p2 = 100; //正确 //3. const修饰指针和常量,指针指向不可以改,指针指向的值也不可以更改 const int* const p3 = &a; //p3 = &b; 报错 //*p3 = 100; 报错
15.6 指针和数组
作用:利用指针访问数组中的元素
int arr[] = {1,2,3,4,5,6,7,8,9};
int* p = arr; //指向数组的指针
cout << "第一个元素:" << arr[0] << endl;
cout << "指针访问的第一个元素:" << *p << endl;
for(int i = 0; i < 10; i++){
//利用指针遍历数组
cout << *p << endl;
p++;
}
15.7 指针和函数
作用:利用指针作函数参数,可以修改实参的值
//值传递
void swap(int a, int b){
int temp = a;
a = b;
b = temp;
}
//地址传递
void swap(int* p1, int* p2){
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
16. 结构体
16.1 概念
结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
16.2 语法和使用
语法:struct 结构体名 {结构体成员列表};
通过结构体创建变量的方式有三种:
struct 结构体名 变量名;struct 结构体名 变量名 = {成员1值,成员2值 ... };定义结构体时顺便创建变量
16.3 结构体数组
作用:将自定义的结构体放入到数组中方便维护
语法:struct 结构体名 数组名[元素个数] = { {} , {} ...... {} };

16.4 结构体指针
作用:通过指针访问结构体中的成员
- 利用操作符
->可以通过结构体指针访问结构体属性

16.5 结构体嵌套结构体
作用:结构体中的成员可以是另一个结构体
例如:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体

16.6 结构体做函数参数
作用:将结构体作为参数向函数中传递,传递方式依旧有两种,即值传递和地址传递。

16.7 结构体中const使用场景
作用:用const来防止误操作

学习的课程链接:
黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难
