C++完整学习笔记
记录我学习C++的完整过程,也可以把这当作C++教程来看,我会记录学习到的几乎所有知识点。
Littering
这个作者很懒,什么都没留下…
展开
-
1.1 创建第一个C++程序-HelloWorld
本文使用的是编译器是Visual Studio 2017。这个系列是我学习C++时记录的,可能会有不准确的地方,欢迎大家指出。原创 2020-06-20 21:41:58 · 337 阅读 · 0 评论 -
1.2 注释
1.2 注释单行注释//这里是注释多行注释/*这里是注释*/以HelloWorld项目为例:#include <iostream>using namespace std;int main(){ std::cout << "HelloWorld" << endl; //输出HelloWorld /* 输出HelloWorld 输出HelloWorld 输出HelloWorld 输出HelloWorld 输出HelloW原创 2020-06-20 21:57:26 · 101 阅读 · 0 评论 -
1.3 变量
1.3 变量变量就是用一个标识符代表某个值,并且这个值可以改变。如令x=10,之后用到的x就代表数字10,也可以再改变为20。同样,新建一个项目,命名为“1_3变量”。#include <iostream>using namespace std;int main(){ int x = 10; cout << "x=" << x << endl; //x=10 x = 20; cout << "x=" << x &l原创 2020-06-20 22:12:51 · 91 阅读 · 0 评论 -
1.4 常量
1.4 常量常量就是固定不变的数值,可以参考圆周率、普朗克常量等理解。在C++中定义常量有几种方式:宏定义#define PI 3.14;const修饰const double PI=3.14;示例#include <iostream>using namespace std;#define PI 3.14int main(){ const int r = 10; cout << "C=" << 2 * r * PI <<原创 2020-06-22 22:43:43 · 137 阅读 · 0 评论 -
2.1 sizeof关键字
2.1 sizeof关键字sizeof关键字可以得到数据类型或者具体的数据占用的空间大小;#include <iostream>using namespace std;int main() { int a = 10; cout << sizeof(int) << endl; //计算数据类型的大小 cout << sizeof(a) << endl; //计算具体数值的大小 system("pause"); return 0;原创 2020-06-22 22:55:26 · 111 阅读 · 0 评论 -
2.2 整型数据
2.2 整型数据整型数据分为四种:类型关键字范围占用空间短整型short-215 ~ 215-12字节整型int-231 ~ 231-14字节长整型long-231 ~ 231-14字节长长整型long long-263 ~ 263-18字节#include <iostream>using namespace std;int main() { cout << SHRT_MAX << end原创 2020-06-22 23:35:15 · 315 阅读 · 0 评论 -
2.3 实型数据
实型中的“实”即实数,有以下几类:类型关键字数值范围占用空间浮点型float(±)3.4E(+/-)384字节双精度型double(±)1.7E(+/-)3088字节不知道叫啥long double(+/-)1.2E(+/-)493216字节上面数值范围的表示为科学计数法,如 3.4E-22 = 3.4*10-22。语法:[数据类型] [标识符];后面可以接表达式。double a;double b = 1.23;double c =原创 2020-06-23 00:04:27 · 816 阅读 · 0 评论 -
2.4 字符型数据
2.4 字符型数据字符型数据用来表示一个字符(只能表示一个,占用一个字节),如a,-,空格等。字符型数据也可以直接当作整形数据来计算,对应的整形数据可以在ASCII表查到。只需记住两个特殊的:aA9765语法:char [标识符];后面可以接表达式。char chr1;char chr2 = 'w';char chr3 = chr2;char chr4 = 'd' + 1;示例:#include <iostream>using namespa原创 2020-06-23 10:31:41 · 370 阅读 · 0 评论 -
2.5 转义字符
2.5 转义字符转义字符是用来表示换行、反斜杠等难以表示或者引起歧义的字符。如下表:(摘自百度百科https://baike.baidu.com/item/%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6/86397?fr=aladdin)转义字符意义ASCII码值(十进制)\a响铃(BEL)007\b退格(BS) ,将当前位置移到前一列008\f换页(FF),将当前位置移到下页开头012\n换行(LF) ,将当前位置移原创 2020-06-23 10:53:19 · 186 阅读 · 0 评论 -
2.6 string字符串型数据
2.5 字符串型数据字符串可以表示多个字符。使用string要包含头文件<string>。有的编译器可能不用包含,因为系统自动包含了。语法:string [标识符];后面可以接表达式。如:string str1;string str2 = "abc";string str3 = str2 + "编程";string型数据占用的空间不容易计算,因为string并不是基本的数据类型,而是人为定义的功能复杂的字符数组。示例:#include<iostream>#原创 2020-06-23 11:12:44 · 134 阅读 · 0 评论 -
2.7 布尔类型
2.7 布尔类型布尔类型有真和假两种数值,分别为true和false,在程序中用来表示逻辑。值意义定义占用空间true真非0数1字节false假01字节示例:#include<iostream>using namespace std;int main() { bool flag1 = 0; bool flag2 = 1; bool flag3 = -10; bool flag4 = false; cout << f原创 2020-06-23 14:33:17 · 167 阅读 · 0 评论 -
2.8 数据的输入
2.8 数据的输入在C++控制台应用程序中,使用cin来输入数据。语法:int a;cin >> a; //输入一个数赋值给a示例:#include<iostream>#include<string>using namespace std;int main() { //1、整型 int a = 0; cout << "给a赋值:" << endl; cin >> a; cout << "整型变量原创 2020-06-23 14:38:05 · 94 阅读 · 0 评论 -
3.1 算术运算符
3.1 算术运算符即加、减、乘、除、取余、自增(减)。运算符符号注意加+操作数是什么类型,则结果也是什么类型减-操作数是什么类型,则结果也是什么类型乘*操作数是什么类型,则结果也是什么类型除/操作数是什么类型,则结果也是什么类型取余%操作数必须是整数,结果也是整数前置递增++a先给a自增1,再进行其他操作后置递增a++先进行其他操作,再给a自增1递减类似,不再描述示例:#include<iost原创 2020-06-23 14:52:52 · 231 阅读 · 0 评论 -
3.2 赋值运算符
3.2 赋值运算符赋值运算符意义=将右操作数赋值给坐操作数+=左操作数加右操作数的结果再赋给左操作数-=左操作数减右操作数的结果再赋给左操作数*=左操作数乘右操作数的结果再赋给左操作数/=左操作数除右操作数的结果再赋给左操作数%=左操作数取余于右操作数的结果再赋给左操作数示例:#include<iostream>using namespace std;int main() { int a = 5; a += 2;原创 2020-06-23 15:01:26 · 93 阅读 · 0 评论 -
3.3 比较运算符
3.3 比较运算符比较运算符返回的结果是bool类型的数据。比较运算符意义==等于!=不等于>大于>=大于等于<小于<=小于等于示例:#include<iostream>using namespace std;int main(){ cout << (1 == 2) << endl; system("pause"); return 0;}运行结果:..原创 2020-06-23 15:05:12 · 190 阅读 · 0 评论 -
3.4 逻辑运算符
3.4 逻辑运算符逻辑运算符即与或非。逻辑运算符符号说明与&&两者为真则返回真或||两者为假则返回假非!真变假,假变真示例:#include<iostream>using namespace std;int main() { bool a = true; bool b = false; cout << (a && b) << endl; cout << (a原创 2020-06-23 15:10:25 · 138 阅读 · 0 评论 -
4.1.1 选择结构-if语句
4.1.1 选择结构-if语句语法:if ([逻辑表达式]){[条件成立时执行的语句]}else{[条件成立时执行的语句]}单层if#include<iostream>using namespace std;int main() { int wid, hei; cout << "请输入矩形的宽:"; cin >> wid; cout << "请输入矩形的高:"; cin >> hei; if (wid ==原创 2020-06-23 15:33:42 · 120 阅读 · 0 评论 -
4.1.2 选择结构-switch语句
4.1.1 选择结构-switch语句switch语句可以直接判断霍格条件,满足某一个就执行某一个,层次清晰,但灵活性不好,用的比较少。示例:#include<iostream>using namespace std;int main(){ //不能判断区间,但效率高,结构清晰 cout << "请给电影进行打分:"; int score = 0; cin >> score; switch (score) { case 10: cout &l原创 2020-06-23 15:43:59 · 165 阅读 · 0 评论 -
4.1.3 选择结构-三目运算符
4.1.3 选择结构-三目运算符语法:[逻辑表达式] ? [值1] : [值2];如果表达式成立,则返回值1,否则返回值2.示例:#include<iostream>using namespace std;int main(){ int a = 10; int b = 20; int c = 0; c = (a > b ? a : b); cout << "c=" << c << endl; //返回的值可以继续赋值 (a原创 2020-06-23 15:50:51 · 206 阅读 · 0 评论 -
4.1.4 选择结构-求最大值
4.1.4 选择结构-求最大值利用选择结构求三个数中的最大值:#include<iostream>using namespace std;int main() { int A = 0; int B = 0; int C = 0; cout << "请输入数A:"; cin >> A; cout << "请输入数B:"; cin >> B; cout << "请输入数C:"; cin >> C;原创 2020-06-23 16:04:56 · 407 阅读 · 0 评论 -
4.2.1 循环结构-while循环
4.2.1 循环结构-while循环循环结构是指重复地执行某一段代码,直到满足跳出循环的条件。while语法:while([逻辑表达式]){[循环体]}逻辑表达式为真时执行循环体。示例:#include<iostream>using namespace std;int main(){ int num = 0; while (num < 10) { cout << num << '\t'; num++; } cout <原创 2020-06-23 23:32:33 · 454 阅读 · 0 评论 -
4.2.2 循环结构-do while
4.2.2 循环结构-do while语法:do{[循环体]}while([逻辑表达式])当逻辑表达式为真时退出循环。示例:#include<iostream>using namespace std;int main() { //do while 先执行再判断条件 int num = 0; do { cout << num << '\t'; num++; } while (num < 10); cout << e原创 2020-06-23 23:40:13 · 186 阅读 · 0 评论 -
4.2.3 循环结构-for循环
4.2.3 循环结构-for循环语法:for([变量初值];[逻辑表达式];[变量变化规律]){[循环体]}实际上,for后面括号里的内容都能省略,只写两个分号就行。示例:#include<iostream>using namespace std;int main(){ for (int i = 0; i <= 9; i++) { cout << i << '\t'; } cout << endl; system("p原创 2020-06-24 00:01:29 · 1337 阅读 · 0 评论 -
4.2.4 循环结构-嵌套循环
4.2.4 循环结构-嵌套循环一个循环里面可以再嵌套其他循环,叫做嵌套循环。用的最多的是for循环的嵌套。下面是一个打印乘法口诀的示例:#include<iostream>using namespace std;int main(){ //乘法口诀表 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { cout << j << "×" << i原创 2020-06-24 00:05:11 · 337 阅读 · 0 评论 -
4.3.1 break、coninue、goto
4.3.1 break、coninue、goto关键词意义break立即跳出循环continue结束本次循环结束,直接进行下一轮循环goto跳到其他标识的地方1.break演示:#include<iostream>using namespace std;int main(){ //乘法口诀表 for (int i = 1; i <= 9; i++) { cout << i << endl; for原创 2020-06-24 00:29:16 · 123 阅读 · 0 评论 -
5.1.1 一维数组
5.1.1 一维数组数组是指一组类似个数组组成的集合,集中表示有利于管理。如一个班的所有同学可以用一个数组表示,同学1代表张三,同学2代表李四……本节介绍一维数组。语法:[数据类型] 数组名[数组长度];示例:#include<iostream>using namespace std;int main(){ //定义数组时必须确定初始长度 int arr1[5]; int arr2[5] = { 0,1,2 }; //后面的用0填充 int arr3[] = { 0原创 2020-06-27 13:18:40 · 138 阅读 · 0 评论 -
5.1.2 一维数组案例-求最大值
5.1.1 一维数组案例-求最大值#include <iostream>using namespace std;int main(){ int arr[10] = { 24,88,24,51,130,33,109 }; int max = 0; for (int i = 0; i < 10; i++) { if (arr[i] > max) { max = arr[i]; } } cout << "最大值是:" << ma原创 2020-06-27 13:29:25 · 1431 阅读 · 0 评论 -
5.1.3 一维数组案例-元素逆置
5.1.2 一维数组案例-元素逆置示例:#include <iostream>using namespace std;int main(){ //逆置元素 int arr[5] = { 1,3,2,5,4 }; cout << "元素逆置前:" << endl; for (int i = 0; i < 5; i++) { cout << arr[i] << '\t'; } cout << endl;原创 2020-06-27 13:47:00 · 526 阅读 · 0 评论 -
5.1.4 一维数组案例-冒泡排序
5.1.4 一维数组案例-冒泡排序冒泡排序的原理,建议参考视频讲解,这样会理解的更清楚。示例:#include <iostream>using namespace std;int main(){ //利用冒泡排序实现升序 int arr[9] = { 4,2,8,0,5,7,1,3,9 }; cout << "排序前:" << endl; for (int i = 0; i < 9; i++) { cout << arr[i原创 2020-06-27 13:59:35 · 305 阅读 · 0 评论 -
5.2.1 二维数组
5.2.1 二维数组二维数组的定义#include<iostream>using namespace std;int main(){ //二维数组定义方式 int arr1[2][3]; //两行三列 int zrr2[2][3] = { {1,2,3}, {4,5,6} }; int arr3[2][3] = { 1,2,3,4,5,6 }; int arr4[][3] = { 1,2,3,4,5,6 }; //一阶下标可以不标明,但二阶下标必须标明 //因原创 2020-06-27 14:39:25 · 108 阅读 · 0 评论 -
5.2.2 二维数组案例-考试成绩
5.2.2 二维数组案例-考试成绩#include<iostream>using namespace std;int main(){ //二维数组案例-考试成绩 //1、创建二维数组 int scores[3][3] = { {100,100,100},{90,50,100},{60,70,80} }; string names[3] = { "张三","李四","王五" }; //、统计每个人总分 for (int i = 0;i < 3;i++) { cout原创 2020-06-27 14:43:30 · 341 阅读 · 0 评论 -
6.1 函数的定义
6.1 函数函数是实现某一功能的一段代码,它可以多次使用,增加了代码的复用性。语法:[返回值类型] [函数名称]([参数列表])下面是一个求和的函数示例:#include<iostream>using namespace std;//函数的定义,加法函数,返回和int sum(int num1, int num2) //函数定义时括号里的参数称为形式参数,简称形参{ return num1 + num2;}int main(){ int a = 10; int原创 2020-06-27 21:43:41 · 128 阅读 · 0 评论 -
6.2 值传递的特性
6.2 值传递的特性上节介绍的将实参复制给形参就是一种值传递,在函数体中对形参进行的任何操作不影响实参。代码验证:#include <iostream>using namespace std;void swap(int num1, int num2){ cout << "交换前:" << endl; cout << "num1=" << num1 << endl;; cout << "num2=" <原创 2020-06-27 21:52:05 · 185 阅读 · 0 评论 -
6.3 函数常见样式
6.3 函数常见样式函数一共有四种常见样式:无参无返有参无返无参有返有参有返这四种形式定义如下:#include<iostream>using namespace std;//1、无参无返void test1(){ cout << "this is test1." << endl;}//2、有参无返void test2(int a){ cout << "this is test2. " << a <原创 2020-06-28 11:31:03 · 167 阅读 · 0 评论 -
6.4 函数的声明
6.4 函数的声明前面的例子都是函数定义写在函数调用之前,如果顺序反了就会报错。那么如何把定义放在后面呢,就要用到函数的声明。函数声明就是提前告诉编译器有这么一个函数存在,不用给我报错。声明就是函数定义的第一行加个分号。示例:#include <iostream>using namespace std;int main(){ int max(int a, int b); //这里先声明max函数 int a = 10; int b = 20; cout <<原创 2020-06-28 11:38:16 · 91 阅读 · 0 评论 -
6.5 函数的分文件编写
6.5 函数的分文件编写在正规项目中,一般main函数所在文件只有一个卖弄函数,不包含其他内容。而把其他的类定义、函数之类的单多存放。本节介绍如何在一个单独的cpp文件定义函数。1. 首先像往常一样添加一个cpp文件用来写main函数。#include<iostream>#include "swap.h"using namespace std;int main(){ swap(1, 2); system("pause"); return 0;}2. 然后再添加头文件原创 2020-06-28 12:01:21 · 506 阅读 · 0 评论 -
7.1 指针的定义和使用
7.1 指针的定义和使用程序中定义的任何一个数据都有一个存放地址,而指针可以用来存放这个地址,并且可以通过这个地址在操作地址中存放的数据。如上图所示,用一块内存来存放数据a=10,这块内存的地址是0x0028。然后我么再定义个指针来存放0x0028这个地址。代码如下: int a = 10; int* p = &a;上面的代码,第一行我们定义了一个数据a=10;第二行定义了一个指针p指向a的地址。这里可以看出指针的定义格式:指针指向的数据是什么类型,就要用什么类型的指针来定原创 2020-06-28 12:20:17 · 266 阅读 · 0 评论 -
7.2 指针所占用的内存空间
7.2 指针所占用的内存空间指针变量跟其他常规变量一样,占用一定的内存空间,且占用的内存与所指向的数据类型无关。操作系统占用空间32位4字节64位8字节#include<iostream>using namespace std;int main(){ //指针所占用的内存空间,32位中4字节,64位8字节,无论数据类型 int a = 10; int* p = &a; cout << "p占用的内存空间:" <<原创 2020-06-28 17:30:50 · 1847 阅读 · 0 评论 -
7.3 空指针和野指针
7.3 空指针和野指针空指针: 不指向任何地址。 int* p = NULL; //p是一个空指针,无法对其解引用。 *p = 100; //错误野指针: 指向一个非法的或已注销的内存。 //随便让p指向一个内存地址,这时再对p操作可能会修改系统中的某些数据,导致未知错误。 int* p = (int*)0x1100;睡意操作野指针是非常危险的做法,可能会使电脑崩溃。...原创 2020-06-28 17:40:08 · 146 阅读 · 0 评论 -
7.4 const修饰指针
7.4 const修饰指针名称表达式意义常量指针const int* p指针指向的值不能改,指针指向能改指针常量int* const p指针指向的值能改,指针指向不能改- -const int* const p指针指向的值不能改,指针指向不能改#include<iostream>using namespace std;int main(){ //常量指针,指针指向的值不可以改,指针指向可以改 int a = 10; const i原创 2020-06-28 17:47:02 · 92 阅读 · 0 评论