C++
前言
C++是一款高运行效率的语言,在之后也将大量使用,因此做了这篇笔记方便之后知识点遗忘后可以查询
基本定义
1.2 注释
单行注释 / 内容 /
多行注释 /* 内容*/
1.3 变量
意义:给一段内存空间取名,方便我们管理内存空间
创建语法:数据类型 变量名 = 变量初始值
1.4 常量
宏常量(define)
使用方法:#define 常量名 常量值
静态变量
const 数据类型 变量名 = 变量值
1.5 关键字(标识符)
c++中具有特定意义,变量常量起名时不可使用
1.6 标识符命名规则
1. 不可以使用关键字
2. 命名只可使用下划线,数字,字母
3. 第一个只能是下划线或字母
4. 需要区分大小写
给变量起名时应做到见名知意
数据类型与输入
2.1数据类型
意义:给变量分配合适的内存空间
类型 | 占用空间 | 取值范围 |
---|---|---|
字符类型 | 占用大小 | 取值范围 |
short(短整型) | 2字节 | -2^15^~2^15^-1 |
int(整型) | 4字节 | -2^31^~2^31^-1 |
long(长整型) | windows:4 Linux:4(32位) 8(64位) | -2^31^~2^31^-1 |
longlong(长长整型) | 8字节 | -2^63^~2^63^-1 |
2.2 sizeof关键字
作用:求得数据类型和变量占用的内存空间
语法: sizeof(数据类型/变量)
2.3 浮点型(float)
数据类型 | 占用空间 | 有效数字范围 |
---|---|---|
float | 4字节 | 7位有效 |
double | 8字节 | 15-16位有效 |
小数计算机默认是double类型,3.14f则变为float类型 | ||
科学计数法表述小数: 3e2->3 * 10^2^ ,3e-2->3 * 0.1^2^ |
2.4 字符型
语法: char ch = ‘a’;
注意: 1.单引号括起来 2.单括号中只可为一位
大小: 一个字符占1个字节
字符型对应的ascll码:强转后打印后可得——(int)char
a-97
A-65
2.5转义字符
作用: 用来表示一些不能显示的ascll字符
常用转义字符:换行符:\n 反斜杠 \\  水平制表符\t——用于整齐的输出数据
2.6字符串
语法: char 字符串名 [] = “ “(C语言) string 字符串名 [] =” “(c++,需要#include
2.7布尔类型(bool)
只有俩个数值,true真即1,false假即0,占一个字节
语法: bool falg = true;
2.8 数据的输入
作用: 从键盘上获取数据
关键字: cin
语法: cin >> 变量
运算符
3.1 算术运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
% | 取余 | 10%3 | 1(整数取余保留整数) |
++ | 前置递增 | a =2;b=++a | a=3;b=3; |
++ | 后置递增 | a=2;b=a++ | a=3; b=2; |
注:1. 不可进行小数取余运算 | |||
2. 前置先进行变量加减,再进行表达式计算,后置先进行表达式计算,后进行变量加减 |
3.2 赋值运算
符号: = += -= *= /= %=
运算: a+=2;–>a=a+2;其他也类似计算
3.3 比较运算符
作用: 用于表达式的比较,并返回一个真值或假值
使用的符号: == != >= <=
3.4 逻辑运算符
作用: 用于根据表达式的值返回真值或假值
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
! | 非 | !a | 如果a为假,则!a为真;如果a为真,则!a为假、 |
&& | 与 | a&&b | 如果a和b都为真,则结果为真,否则为假 |
|| | 或 | a||b | 如果a和b中有一个为真则结果为真,二者都为假时,结果为假 |
程序流程结构
4.1 选择结构
4.1.1 if语句
单行if
作用: 执行满足条件的语句
语法: if(判断的条件,真则执行,假则不执行)
{
执行的内容
}
多行if
if(条件)
{
成立执行的语句
}else
{
不成立执行的语句
}
多条件if语句
语法: if(){}
else if()
{}else if()
{}
…
else{都不满足的执行语句}
if语句的嵌套
作用: 做到更精准的条件判断
if(条件一)
{
if(条件一下进一步的条件)
{
}
}
4.1.2 三目运算符
作用: 通过三目运算符实现简单判断
语法: 表达式?a:b
如果表达式为真,执行a,并返回a的值
如果表达式为假,执行b,并返回b的值
注: 返回的是变量,可以继续进行赋值操作
4.1.3 switch语句
作用: 执行多分支条件语句
switch(a)
{
case 1:
{
}break;(用于跳出执行,否则之后的语句将全部依次执行)
case 2
{
}break;
....
default:
{
}break;
}
注: switch语句中表达式类型只能是整型或者字符型
循环结构
4.2.1while 循环语句
作用: 满足循环条件,执行循环语句
语法: whille(循环条件){循环语句},只要循环条件为真,就执行循环语句
注: 需要有一个退出循环的出口
4.2.2 do….while循环语句
作用: 满足条件下,执行循环语句
语法:
do
{
执行的语句
}
while(判断语句)
注: 与while的区别为do while会先执行一遍执行语句
4.2.3 for循环语句
作用: 执行满足执行条件的语句
语法:
for(起始表达式;条件表达式;末尾循环体)
{
}
4.2.4 嵌套循环
作用: 在循环中再嵌套循环,用于解决实际问题
4.3 跳转语句
4.3.1 break语句
作用: 用于跳出选择结构或者循环结构
break的使用时机:
1.用于switch语句中,作用是终止case并跳出swich
2.出现在循环语句中,作用是跳出当前的循环语句
3.出现在嵌套语句中,跳出最近的内层循环
4.3.2 continue语句
作用: 在循环语句中,跳过本次循环中尚未执行的语句,继续执行下一次循环
注: continue跳出的是单次循环,循环并不会结束,break是结束循环
4.3.3 goto语句
作用: 可以无条件跳转语句
语法:
goto 标记名;
…..
标记名:
5. 数组
5.1 数组概述
数组是一个存放了相同类型的数据元素
特点:
1.数组中的每个数据元素都是相同的数据类型
2.数组是由连续的内存位置组成的
5.2 一维数组
5.2.1 一维数组的定义方式
1.数组类型 数组名[数组长度];
2.数组类型 数组名[数组长度]={值1,值2…..};
3.数组类型 数组名[]={值1,值2….}
5.2.2 一维数组数组名
用途:
1.可以统计整个数组在内存中的长度
2.可以获取数组在内存中的首地址
5.3二维数组
5.3.1 二维数组的定义
定义方式:
1.数组类型 数组名 [行数][列数];
2.数组类型 数组名 [行数][列数] = { {数据1,数据2},{数据3,数据4} }
3.数据类型 数组名[行数][列数]={数据1,数据2,数据3,数据4}
4.数据类型 数据名[][列数]={数据1,数据2,数据3,数据4};
注: 可以通过嵌套循环来打出多维数组
5.3.2 二维数组的数组名
1.可以查看二维数组占用的数据空间 sizeof(数组名)
2.二维数组的首地址 cout << (int)数组名 <<end1
函数
6.1 函数概述
将一段常用的代码封装起来,减少代码的重复
6.2 函数的定义
定义步骤:
1.返回值类型
2.函数名
3.参数列表
4.函数体语句
5.return表达式 (无返回值时可以不写)
语法:
返回值类型 函数名 (参数列表)
{
函数体语句
return表达式
}
6.3 函数的调用
功能: 使用定义好的函数
语法: 函数名(参数)
6.4 值传递
定义: 就是将函数调用时实参的数值传给形参
注: 形参发生改变不会影响实参
形参是再另外取俩个空间,接收实参传递过来的值,因此不会改变实参的值
6.5 函数的常见样式
1.无参无返
2.有参有返
3.有参无返
4.无参有返
6.6 函数的声明
当函数在主函数后,需要写一个声明在主函数前面
函数类型 函数名(数据列表)
6.7 函数的分文件编写
1.创建后缀名为.h的头文件
2.创建后缀名为.cpp的源文件
3.在头文件中写函数的声明
4.在源文件中写函数的定义
7. 指针
7.1&2 指针的定义与使用
作用: 通过指针间接访问一片内存空间
一片空间保存着另一片空间的地址,即可实现间接访问
指针的定义: 数据类型 指针变量名 = & 记录的变量
指针的使用: 在指针前加表示解引用 等于访问指针所指向的那个变量
7.3 指针所占用的内存空间
指针在32位操作系统下默认用四个字节保存地址,在64位操作系统下用八个字节保存地址
7.4 空指针和野指针
空指针: 指针变量指向内存中编号为0的空间
用途: 用于初始化指针变量
注意: 空指针指向的内存是不可访问的(0-255的空间编号是系统使用的)
野指针: 指针变量指向未知空间
7.5 const修饰指针
1.const修饰指针–常量指针
2.const修饰常量–指针常量
3.const即修饰常量,又修饰指针
int a = 10;
int b = 10;
int *p = &a
常量指针:
const int *p =&a;
特点: 修饰的是指针,指针的指向可以修改,但指针指向的值不可修改
指针常量:
int * const p = &a;
特点: 修饰的是常量,指针的指向不可以修改,指针的指向的值可以修改
即修饰指针,又修饰常量:
const int const *p = &a;
指针的指向和指针指向的值都不可以改变
7.6 指针与数组
利用指针来访问数组
int a[10]={}
int *p = a;
p–>a[0],p++,p–>a[1]
p偏移了四个字节
7.7 指针与函数
作用: 利用指针作为函数参数,可以实现实参的改变
地址传递:
void a (int *p1 , int *p2)
a(&b,&c)
注: 因为指针传递的是地址,使用操作的是同一片空间。实参和形参因为操作的表示同一片地址,所以形参的改变并不影响实参的值。
8. 结构体
8.1 基本概念
结构体属于用户自定义的数据类型,允许用户储存不同的数据类型
8.2 结构体的定义和使用
语法: struct 结构体名称 {结构体成员列表};
三种创建结构体变量的方式:
1.struct 结构体名 变量名
2.struct 结构体名 变量名 = {成员1,成员2…..}
3.定义结构体时顺便定义变量
赋值:
通过.来给成员赋值,变量名.成员名
注: 创建结构体时struct不可以省略,创建结构体变量时可以省略
8.3 结构体数组
作用: 将自定义的结构体放入到数组中方便维护
语法: struct 结构体名 数组名[元素个数] =