C++学习笔记---基础知识

本学习笔记是本人在学习B站中 黑马程序员匠心之作—C++教程从0到1入门编程 时所写,若有错误,还希望大佬们可以留言指出。
学习视频地址:https://www.bilibili.com/video/BV1et411b73Z/?spm_id_from=333.999.0.0

C++初识

基本框架

#include<iostream>
#include<string> 
using namespace std;  //需要加分号
int main()
{
      cout<<”hello world”<< endl; //输出
      system(“pause”); //按任意键继续
      return 0;
}

注释

单行注释://
多行注释:/* 内容 */

变量

意义:方便管理内存空间
定义方式:数据类型 变量名=变量初始值;eg:int a=10

常量

常量的定义方式有两种:

  1. 宏常量:通常定义在文件上方
    定义方式:#define Day(常量名) 7(常量值)
  2. const 修饰的变量也为常量
    定义方式:const int a=10;
    注意:常量不可以进行修改

关键字

关键字是C++预先保留的单词 ,在定义变量或常量时,不可使用关键字

标识符

  1. 标识符不能是关键字
  2. 标识符只能是数字、字母、下划线
  3. 标识符得第一个字符必须是字母或下划线
  4. 标识符中的字母区分大小写

数据类型

C++规定在创建一个变量或常量时,必须要指定相应的数据类型,否则无法给变量分配内存。
数据类型存在的意义:给变量分配合适的内存空间。

sizeof关键字

作用:统计数据类型所占内存空间
用法:sizeof(数据类型/变量) eg:sizeof(float);

整型

整形总共有4种:
| 短整型 | short | 2字节 | -215~215-1
| 整形 | int | 4字节 | -231~231-1
| 长整型 | long | windows为4字节;Linux为4字节(32位操作系统),8字节(64位操作系统) | -231~231-1
| 长长整形 | longlong | 8字节 | -263~263-1

实型(浮点型)

用于表示小数
默认会显示出6位有效数字
| 单精度 | float | 4字节 | 7位有效数字
| 双精度 | double | 8字节 | 15~16位有效数字
float f1=3.14f (编辑器会默认把小数当作一个双精度,用float去接收该小数时,会多一步转换过程,所以需要在小数后面加一个f,告诉编辑器该数是一个单精度)
科学计数法: float f2 = 3e2,即3102 ; float f3 =3e-2; 即310(-2)

字符型

用于显示单个字符,占一个字节。
定义方式:char ch= ’a’ ;
注意:用单引号将字符括起来,不是双引号,且单引号内只能有一个字符,不可以是字符串。
字符型变量并不是将字符本身放到内存中存储,而是将对应的ASCII码放入存储单元。
对应的ASCII码 a-97 A-65
字符型

转义字符

用于表示一些不能显示出来的ASCII字符
\n 换行
\ 反斜杠
\t 水平制表符: 整齐的输出数据
转义字符

字符串型

用于表示一串字符
有两种风格:
1. C语言风格:char 变量名[] =”字符串值”
2. C++风格: string 变量名=”字符串值” 需加头文件(#include)

布尔类型

布尔类型bool:代表真或假的值,只占一个字节的内存
只有两个值: true–本质是1 false–本质是0
字符串型和布尔类型

数据的输入

用于从键盘获取数据
关键字 cin eg:cin >> 变量
数据的输入

运算符

算术运算符

四则运算:加减乘除
整数相除,结果仍为整数,小数部分去除;两个小数相除,结果也可以为小数。
取模运算 % :两个小数之间不可以做取模运算;只有整形变量可以做取模运算
递增递减 :a++ ++a 都是让变量加1
++a先自加再运算 a++先运算再自加
eg:a=10 b=(a++)*10 , c=(++a)*10 b=100 , c=110

赋值运算符

将表达式的值赋给变量
主要有:= 、 += 、 *= 、 /= 、 %=
(a+=2 等价于a=a+2) , (a/=2 等价于a=a/2)

比较运算符

表达式的比较 并返回一个真值(1)或假值(0)
主要有:== 、 != 、 < 、 > 、 <= 、 >=

逻辑运算符

根据表达式的值返回真值或假值
! 非 eg: !a 若a为假,则 !a 为真; 若a为真,则 !a 为假 。
&& 与 eg: a&&b a,b同时为真,结果为真,否则为假。
|| 或 eg: a||b a,b有一个为真,结果为真;二者都为假,结果为假。

在C++中,只要不是0,都为真。

程序流程结构

顺序结构

程序按顺序执行,不发生跳转

选择结构

依据条件是否满足,有选择的执行相应的功能

if语句

if语句

三目运算符

表达式1?表达式2:表达式3 (1为真,则执行2;1为假,则执行3。)

Switch语句

执行多条件分支语句 执行效率高,表达式类型只能是整形或字符型。

                 Switch(表达式)
                  {
                      Case 结果1: 执行语句;  break;
                      Case 结果2: 执行语句;  break;
                      ···
                      Default:    执行语句;  break;
                  }

循环结构

依据条件是否满足,循环多次执行某段代码;在写循环时,一定要注意不要写成死循环。

While循环

while循环

do-While循环

do-while循环

for循环

for循环

嵌套循环

for-if嵌套
for-for嵌套

跳转语句

break语句

用于跳出选择结构或循环结构。

  1. 出现在switch条件语句中,终止case并跳出switch
  2. 出现在循环语句中,跳出当前的循环语句
  3. 出现在嵌套语句中,跳出最近的内层循环语句

continue语句

在循环语句中,跳过本次循环中余下的尚未执行的语句,继续执行下一次的循环。
可以用来筛选条件,执行到此就不在向下执行,指向下一次的循环。
continue语句

goto语句

无条件跳转语句,跳到标记语句。
goto语句
只做了解,一般不用。

数组

所谓数组,就是一个集合里面放了许多相同类型的数据元素。
特点:1. 数组中每个数据元素都是相同的数据元素
2. 数组是由连续的内存位置组成的

一维数组

定义方式共有三种:
1. 数据类型 数组名 [ 数组长度 ];
2. 数据类型 数组名 [ 数组长度 ] = {值1,值2,···};
3. 数据类型 数组名 [ ] = {值1,值2,···};

若在初始化时,没有全部赋值,则剩余的会用0补充。
一维数组名称的用途:
1. 可以统计整个数组在内存中的长度;eg:sizeof(arr)
2. 可以获取数组在内存中的首地址;eg:cout<< arr <<endl;(16进制 可以在arr前加int 进行强制转换为十进制)
3. 可以获数组中第一个元素的地址;eg:cout<<(int)&arr[0]<<endl;
4. 数组名是一个常量,不可以进行赋值操作。eg:arr=100;(×)
一维数组

冒泡排序

对数组内元素进行排序。
步骤:1.比较相邻元素,若第一个比第二个大,就交换
2. 对每一对相邻元素做同样的工作,执行完毕,找到第一个最大值
3. 重复以上步骤,每次比较次数-1,直至不需要比较

排序的总轮数=元素个数-1;
每轮对比次数=元素个数-排序轮数-1;
冒泡排序

二维数组

在一维数组上,多加一个维度
定义方式共有四种:
1. 数据类型 数组名 [行数] [列数];
2. 数据类型 数组名 [行数] [列数]={ {数据1,数据2} , {数据3,数据4} };
3. 数据类型 数组名 [行数] [列数]={数据1,数据2,数据3,数据4};
4. 数据类型 数组名 [] [列数]={数据1,数据2,数据3,数据4};

二维数组数组名的用途:查看二维数组所占内存空间;获取二维数组首地址
外层循环打印行数,外层循环打印列数
二维名称用途
二维数组实例

函数

函数可以概括成两个字就是封装

框架

返回值类型 函数名 (参数列表)
{
            函数体语句;
             return 表达式; //void型不需要return
}

常见的函数样式

函数样式
调用
值传递时,函数的形参发生改变,并不会影响实参;
地址传递时,函数的实参会发生改变。

函数的分文件编写

  1. 创建一个.h的头文件
  2. 创建一个.cpp的源文件
  3. 在头文件中写函数声明以及该有的头文件
    函数声明 :返回值类型 函数名 (参数列表)
    该有的头文件,例如,#include / using namespace std; 等
  4. 在源文件中写函数定义 同时要写一个自定义的头文件 #include ”swap.h”

指针

指针就是地址
作用:通过指针间接访问内存
内存编号从0开始记录且一般使用十六进制数字表示,可以利用指针变量保存地址。
32位操作系统下,占4字节;64位操作系统下,占8字节。(不管是什么类型)
定义:数据类型 * 指针变量;

//第一种
int a=10;  
int  * p; 
p=&a; //让指针记录变量a的地址
//第二种:
int a=10;  
int *p=&a;

*通过解引用的方式找到指针指向的内存,即 p
指针

空指针

针变量指向内存编号为0的空间 eg:int * p=NULL;
用途:初始化指针变量
空指针指向的内存是不可以访问的,因为0~255之间的内存编号是系统占用的

野指针

指针变量指向非法的内存空间

 int * p=(int *)0x1100;

程序中要尽量避免野指针

const修饰指针

  1. const修饰指针—常量指针;
    const int * p=&a;
    指针指向可以修改但指针指向的值不可以修改
    *p=20(错误,值不可以改) p=&b(对,指针指向可以修改)

  2. const修饰常量–指针常量;
    int * const p =&a;
    指针指向不可以修改,指针指向的值可以改

  3. const即修饰指针,又修饰常量
    const int * const p = &a;
    指针指向和指针指向的值都不可以修改

指针和数组

利用指针来访问数组中的元素
int * p=arr; //数组名就是数组的首地址
p++; //让指针向后偏移四个字节

指针和函数

利用指针作函数参数,可以修改实参的值
想要改变实参就用地址传递,不想改变就用值传递
值传递、地址传递

指针 数组 函数

指针、数组、函数
指针、数组、函数

结构体

用户自定义的数据类型,允许用户存储不同的数据类型
语法:struct 结构体名称 {结构体成员列表};
创建变量的三种方式:
1. struct 结构体名 变量名
2. struct 结构体名 变量名={成员值1,成员值2,···}
3. 定义结构体时顺便创建变量

结构体定义时,struct不可以省略;创建变量时,可以省略。
结构体变量利用“.”来访问。

结构体数组

将自定义的结构体放入数组中方便维护
语法:struct 结构体名 数组名[元素个数]={ {}, {}, {},····,{} }
结构体数组

结构体指针

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

结构体嵌套结构体

结构体中的成员可以是另一个结构体
结构体嵌套结构体

结构体做函数参数

将结构体作为参数向函数中传递
传递方式:值传递、地址传递
结构体参数
将函数中的形参改为指针(即地址传递),可以减少内存空间,而且不会复制出新的副本,但地址传递会改变实参的值,为防止有误操作的行为,可以在形参前加上const关键字。

结构体中const使用场景

用 const 来防止误操作
const

案例1

案列1
案列1
案列1

案例2

案列2
案列2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值