|
本文同步发表在我的个人博客中:
<hr/>1. IDE
1.1 Visual Studio

1.2 CLion
我最后还是选择了 CLion 因为之前一直用的JetBrains公司开发的IDE工具,换成Visual Studio突然还不习惯,虽然Visual Studio是我接触的第一款IDE,但是用它来编写C++代码提示居然默认不选中,编写C#的时候都可以,网上搜索发现Visual Studio编写C++代码就是这么设计的!(黑人问号?)
当然IDE这种东西还是自己顺手就好,如果你喜欢,你完全可以用记事本来写程序。
1.2.1 CLion 运行环境
因为我安装了Visual Studio所以可以直接导入Visual Studio的运行环境。
1.2.2 中文乱码

图中的设置部分换成UTF-8,然后右下角控制台格式切换为GBK

2. 入门
2.1 Hello, World!
#include <iostream>
using namespace std;
int main() {
cout << &#34;Hello, World!&#34; << endl;
return 0;
}
2.2 控制台打印
需要引入using namespace std;,然后通过cout << XXX << endl;打印,不得不说学过高级语言后觉得这实在很难用。
虽然可以用C语言的printf()但是你如果要打印一个变量需要给出类型,比如:
#include <iostream>
int main() {
int a = 10;
printf(&#34;%d&#34;, a);// 必须指定类型,不然会报错
return 0;
}
2.3 清除控制台
system(&#34;cls&#34;);
2.4 保留关键字
C++中预先保留的单词,在定义变量或者常量时候,不要用关键字

3. 数据类型
3.1 整形

3.2 浮点型
用于表示小数
浮点型变量分为两种:
两者的区别在于表示的有效数字范围不同。

一般情况下float就足够了,如果不够用再定义double。
3.3 字符
语法:char ch = &#39;a&#39;;
- C和C++中字符型变量只占用1个字节。
- 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元。
3.4 字符串
C风格字符串: char 变量名[] = &#34;字符串值&#34;
C++风格字符串: string 变量名 = &#34;字符串值&#34; 需要加入头文件#include<string>
3.5 布尔类型 bool
- true --- 真(本质是1)
- false --- 假(本质是0)
- bool类型占1个字节大小
3.6 转义字符

4. 运算符
4.1 算术运算符

4.2 赋值运算符

4.3 比较运算符

4.4 逻辑运算符

5. 流程控制
5.1 if语句(常用)
if(条件){ 条件满足执行的语句 }

int main() {
//选择结构-单行if语句
//输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印
int score = 0;
cout << &#34;请输入一个分数:&#34; << endl;
cin >> score;
cout << &#34;您输入的分数为: &#34; << score << endl;
//if语句
//注意事项,在if判断语句后面,不要加分号
if (score > 600) {
cout << &#34;我考上了一本大学!!!&#34; << endl;
}
system(&#34;pause&#34;);
return 0;
}
多行格式if语句:if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };

int main() {
int score = 0;
cout << &#34;请输入考试分数:&#34; << endl;
cin >> score;
if (score > 600) {
cout << &#34;我考上了一本大学&#34; << endl;
} else {
cout << &#34;我未考上一本大学&#34; << endl;
}
system(&#34;pause&#34;);
return 0;
}
多条件的if语句:if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}

int main() {
int score = 0;
cout << &#34;请输入考试分数:&#34; << endl;
cin >> score;
if (score > 600) {
cout << &#34;我考上了一本大学&#34; << endl;
} else if (score > 500) {
cout << &#34;我考上了二本大学&#34; << endl;
} else if (score > 400) {
cout << &#34;我考上了三本大学&#34; << endl;
} else {
cout << &#34;我未考上本科&#34; << endl;
}
system(&#34;pause&#34;);
return 0;
}
嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
int main() {
int score = 0;
cout << &#34;请输入考试分数:&#34; << endl;
cin >> score;
if (score > 600) {
cout << &#34;我考上了一本大学&#34; << endl;
if (score > 700) {
cout << &#34;我考上了北大&#34; << endl;
} else if (score > 650) {
cout << &#34;我考上了清华&#34; << endl;
} else {
cout << &#34;我考上了人大&#34; << endl;
}
} else if (score > 500) {
cout << &#34;我考上了二本大学&#34; << endl;
} else if (score > 400) {
cout << &#34;我考上了三本大学&#34; << endl;
} else {
cout << &#34;我未考上本科&#34; << endl;
}
system(&#34;pause&#34;);
return 0;
}
5.2 三目运算符
语法:表达式1 ? 表达式2 :表达式3
解释:
如果表达式1的值为真,执行表达式2,并返回表达式2的结果;
如果表达式1的值为假,执行表达式3,并返回表达式3的结果。
int main() {
int a = 10;
int b = 20;
int c = 0;
c = a > b ? a : b;
cout << &#34;c = &#34; << c << endl;
//C++中三目运算符返回的是变量,可以继续赋值
(a > b ? a : b) = 100;
cout << &#34;a = &#34; << a << endl;
cout << &#34;b = &#34; << b << endl;
cout << &#34;c = &#34; << c << endl;
system(&#34;pause&#34;);
return 0;
}
5.3 switch语句
switch(表达式){
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default:执行语句;break;
}
5.4 循环结构
5.4.1 while循环语句(常用)
语法:while(循环条件){ 循环语句 }

int main() {
int num = 0;
while (num < 10) {
cout << &#34;num = &#34; << num << endl;
num++;
}
system(&#34;pause&#34;);
return 0;
}
5.4.2 do...while循环语句
语法: do{ 循环语句 } while(循环条件);
注意:与while的区别在于do...while会先执行一次循环语句,再判断循环条件
int main() {
int num = 0;
do {
cout << num << endl;
num++;
} while (num < 10);
system(&#34;pause&#34;);
return 0;
}
5.4.3 for循环语句(常用)
作用: 满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }
int main() {
for (int i = 0; i < 10; i++) {
cout << i << endl;
}
system(&#34;pause&#34;);
return 0;
}
5.5 跳转语句
5.5.1 break语句
break使用的时机:
- 出现在switch条件语句中,作用是终止case并跳出switch
- 出现在循环语句中,作用是跳出当前的循环语句
- 出现在嵌套循环中,跳出最近的内层循环语句
5.5.2 continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
5.5.3 goto语句(慎用)
注意:在程序中不建议使用goto语句,以免造成程序流程混乱
6. 数组
所谓数组,就是一个集合,里面存放了相同类型的数据元素
6.1 一维数组
- 数据类型 数组名[ 数组长度 ];
- 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
- 数据类型 数组名[ ] = { 值1,值2 ...};
int main() {
//定义方式1
//数据类型 数组名[元素个数];
int score[10];
//利用下标赋值
score[0] = 100;
score[1] = 99;
score[2] = 85;
//利用下标输出
cout << score[0] << endl;
cout << score[1] << endl;
cout << score[2] << endl;
//第二种定义方式
//数据类型 数组名[元素个数] = {值1,值2 ,值3 ...};
//如果{}内不足10个数据,剩余数据用0补全
int score2[10] = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};
//逐个输出
//cout << score2[0] << endl;
//cout << score2[1] << endl;
//一个一个输出太麻烦,因此可以利用循环进行输出
for (int i = 0; i < 10; i++) {
cout << score2 << endl;
}
//定义方式3
//数据类型 数组名[] = {值1,值2 ,值3 ...};
int score3[] = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};
for (int i = 0; i < 10; i++) {
cout << score3 << endl;
}
system(&#34;pause&#34;);
return 0;
}
6.2 二维数组
二维数组定义的四种方式:
- 数据类型 数组名[ 行数 ][ 列数 ];
- 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
- 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
- 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性 int main() {
//方式1
//数组类型 数组名 [行数][列数]
int arr[2][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << arr[j] << &#34; &#34;;
}
cout << endl;
}
//方式2
//数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };
int arr2[2][3] =
{
{1, 2, 3},
{4, 5, 6}
};
//方式3
//数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4 };
int arr3[2][3] = {1, 2, 3, 4, 5, 6};
//方式4
//数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4 };
int arr4[][3] = {1, 2, 3, 4, 5, 6};
system(&#34;pause&#34;);
return 0;
}
7. 函数(重要)
作用:将一段经常使用的代码封装起来,减少重复代码
一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。
7.1 定义
返回值类型 函数名 (参数列表){
函数体语句
return表达式
}
- 返回值类型 :一个函数可以返回一个值。在函数定义中
- 函数名:给函数起个名称
- 参数列表:使用该函数时,传入的数据
- 函数体语句:花括号内的代码,函数内需要执行的语句
- return表达式: 和返回值类型挂钩,函数执行完后,返回相应的数据
7.2 值传递
- 所谓值传递,就是函数调用时实参将数值传入给形参
- 值传递时,如果形参发生,并不会影响实参
7.3 函数的声明
作用: 告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。
7.4 分文件编写
作用:让代码结构更加清晰
函数分文件编写一般有4个步骤
- 创建后缀名为.h的头文件
- 创建后缀名为.cpp的源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义
//swap.h文件
#include<iostream>
using namespace std;
//实现两个数字交换的函数声明
void swap(int a, int b);
//swap.cpp文件
#include &#34;swap.h&#34;
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << &#34;a = &#34; << a << endl;
cout << &#34;b = &#34; << b << endl;
}
//main函数文件
#include &#34;swap.h&#34;
int main() {
int a = 100;
int b = 200;
swap(a, b);
system(&#34;pause&#34;);
return 0;
}
8. 指针(重要)
几乎所有的编程语言都存在着指针,但是C++中的指针真是我学过的语言中最复杂的。其它语言最多只了解一下值类型和引用类型需要理解指针,但是C++却需要操作指针。
8.1 概念
指针的作用: 可以通过指针间接访问内存
- 内存编号是从0开始记录的,一般用十六进制数字表示
- 可以利用指针变量保存地址
指针变量定义语法: 数据类型 * 变量名;
- 普通变量存放的是数据,指针变量存放的是地址
- 指针变量可以通过&#34; * &#34;操作符,操作指针变量指向的内存空间,这个过程称为解引用
8.2 指针所占内存
所有指针类型在32位操作系统下是4个字节
8.3 空指针和野指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的
int main() {
//指针变量p指向内存地址编号为0的空间
int * p = NULL;
//访问空指针报错
//内存编号0 ~255为系统占用内存,不允许用户访问
cout << *p << endl;
system(&#34;pause&#34;);
return 0;
}
野指针:指针变量指向非法的内存空间
int main() {
//指针变量p指向内存地址编号为0x1100的空间
int * p = (int *)0x1100;
//访问野指针报错
cout << *p << endl;
system(&#34;pause&#34;);
return 0;
}
空指针和野指针都不是我们申请的空间,因此不要访问。
8.4 const修饰指针
const修饰指针有三种情况
- const修饰指针 --- 常量指针
- const修饰常量 --- 指针常量
- const即修饰指针,又修饰常量
9. 结构体
结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
语法:struct 结构体名 { 结构体成员列表 };
通过结构体创建变量的方式有三种:
- struct 结构体名 变量名
- struct 结构体名 变量名 = { 成员1值 , 成员2值...}
- 定义结构体时顺便创建变量
9.1 指针
作用:通过指针访问结构体中的成员
- 利用操作符 ->可以通过结构体指针访问结构体属性
10. 参考资料
视频:https://www.bilibili.com/video/BV1et411b73Z
笔记:https://github.com/AnkerLeng/Cpp-0-1-Resource |
|