本人还有一星期要开始期末考试了,复习c++时顺便挖个坑,之后会详细更新。
目录
1 初识源代码
本节只做大致科普,熟悉的课跳过
1.1 c++程序的产生
我们编写的是源代码,即cpp文件
1.2 代码例
看以下代码:
#include <iostream>
using namespace std; //编译指令
int main() //主函数
{ //块开始
cout << "hello"; //输出语句
return 0;
} //块结束
- 第一行是宏(详见???),第二行是using编译指令(详见???),这两行使得第五行cout语句有效
- // 后的内容是注释,即机器将忽略源代码中,// 后同一行的内容
- ; 代表语句结束
- 第三行是main函数的开头,程序将从这里开始执行
- 第四行和第七行是main函数的内容,被称为块,{ } 分别代表块开始和结束
- 第五行是cout语句,将指定内容发送至屏幕
- 第六行是return语句,执行这句话时将立即结束当前块,而不是逐句执行到块末
1.3 标记、空白
- 标记:不可分割的一个整体,能被机器识别
- 空白:空格、制表符、回车
如前文中,int、main、cout就是标记,中间的空格就是空白。我们在编写代码时,应用空白将标记隔开,与代码标准风格统一,具体如下:
- 每条语句占一行。
- 括号应成对。
- 语句应根据块(大括号)进行缩进。
- 函数名和其括号间没有空白。
2 简单数据类型
将可修改的信息存储在计算机中,我们需要指明信息的存储位置和内存空间大小。这被高级程序语言抽象为“变量”。变量包括三个部分:变量名、变量类型、变量的值。
2.1 变量名
变量名遵守命名规则:
- 在名称中只能使用字母、数字和下划线(_)。
- 第一个字符不能是数字。
- 区分大写字符与小写字符。
- 不能将C++关键字用作名称。
值得一提的是,以下划线开头的名称大多都被库中的变量使用。
2.2 变量类型
基本变量分为两种类型:整型、浮点型。整型变量存储整数;浮点型变量存储浮点数,即实数。同类型的不同变量使用不同的内存空间大小,以储存不同大小的数,或实现特殊的功能。具体如下:
- 整型:char、short、int、long、long long、bool
- 浮点型:float、double、long double
2.3 变量大小、功能
不同位数的系统,变量大小可能不同。64位系统所占字节数如下表:
变量类型 | 变量大小 | 功能说明 |
char | 1 | 根据ASCII码表,将存储的值映射成字符 |
short | 2 | |
int | 4 | 存储一定范围的整数 |
long | 4 | |
long long | 8 | |
bool | 1 | 只有一位,即只有0和1两个值 |
float | 4 | 存储一定范围的浮点数 |
double | 8 | 存储一定范围的浮点数 |
long double | 16 |
2.4 使用变量
2.4.1 变量声明
c++在使用变量之前,需要先对变量进行声明(数学中的“设……”),格式如下:
type name;
int a; //定义int型变量a
float b; //定义float型变量b
char c; //定义char型变量c
即先指出变量类型,然后写出变量名。
你也可以连续声明:
int a, b; //用,隔开
ps:这种声明是定义声明,也简称定义。另有引用声明,详见内存模型篇章。
2.4.2 变量赋值
使用 = 运算符,格式如下:
name = value;
a = 1; //现在,a的值为1
b = 1.5; //现在,b的值为1.5
c = 'A'; //现在,c的值为65,可映射为大写字母A
也可直接在定义时赋值,俗称初始化
int a = 1;
2.5 限定符
在定义变量时使用限定符,将对变量产生对应的效果。
unsigned限定符:使整型变量只存储正整数。
const限定符:使变量被初始化后,值不可更改。
unsigned int a;
const float b = 1.5;
char const c = 'A';
- 对于简单变量类型,const的位置不重要
- 应在定义时,对const变量进行初始化(否则报错)
unsigned不再过多叙述,详见附录1.2.5
2.6 字面量
字面量,是出现在源代码中的量。人通过其与源代码进行交互。其中包括数字、前后缀、单引号(字符)、双引号(字符串),详见下表:
标记例 | 意义 |
10、9、8 | 10进制数字 |
010、09、08 | 8进制数字,用前缀0标识 |
0x10、0x9、0X8 | 16进制数字,用前缀0x或0X标识 |
1.1、.22 | double类型的浮点数 |
1.1f、.22F | float类型的浮点数,用后缀f、F标识 |
1.1L、.22L | long double类型的浮点数,用后缀L标识 |
'a'、'b'、'\n'、'\0' | 单个字符,用单引号标识 |
L'a'、L'Z' | 单个宽字符,用前缀L标识 |
“hello” | 单个字符串,用双引号标识 |
ps:有关字符串的内容见数据类型篇章
3 简单输入输出
我们提出的输入输出,是针对程序而言的。外界对程序输入, 程序对外界输出。你可以想象两个方块,左边的是外界,右边的是程序,便于后续理解。
3.1抽取、插入运算符
暂时不理会 >> 和 << 的名称,先看下述代码:
int x;
cin >> x; //将输入的值赋给x
cout << x; //将x的值输出
cin表示标准输入流(键盘),cout表示标准输出流(屏幕),这样就实现了程序与外界的交互。你也可以连续使用:
int x, y;
cin >> x >> y;
cout << x << y;
在此不再过多深入,详细请见c++ primer plus学习笔记(3)——结构语句、简单输入输出
3.2转义序列
转义序列使得程序能输出特定的内容,具体如下:
转义序列符 | 描述 | 含义 |
\n | 换行符 | 移到下一行 |
\t | 水平制表符 | 移动到下一水平制表位,相当于tab |
\v | 垂直制表符 | 移动到下一垂直制表位 |
\b | 退格符 | 移回一个空格 |
\r | 回车符 | 光标返回至当前行的开始处,用于套印 |
\f | 换页符 | 发出一个换页指令 |
\a | 警报 | 发出一个警报 |
\\ | 反斜线 | 插入一个反斜线字符 |
\? | 问号 | 插入一个问号字符 |
\0 | 空字符 | 插入一个空字符,它被定义为具有数值0 |
\" | 插入双引号 | 插入一个“ |
\' | 插入单引号 | 插入一个‘ |
cout << '\\' << '\n' << '\\'; //这将在两行个打印一个\
cout << "\\\n\\"; //或者连成字符串
4 简单宏
宏是一种指令,根据指定规则替换文本。常用的有以下宏
4.1 #include
意即包含,将指定头文件导入源代码,格式如下:
#include <…>
#include "…"
这两种格式的区别是:尖括号表明程序应直接从指定路径(c++库)寻找头文件,双引号则从当前路径寻找头文件。例如:
cout 的声明就在 iostream 中,iostream 是c++库的头文件,包含了这个头文件才能使用cout。
4.2 #define
意即“定义”,将指定的文本替换为指定的字面量,是用来解放程序员的。格式如下:
#define before after
before是更改前的文本,after是更改后的文本,例:
#define PI 3.14
……
cout << PI;
在后续代码中,我们便可以使用PI这个标记。在编译前,这将被替换成3.14