编译型语言
编程语言可以分为四个层次,从上到下,语言会更接近人类使用语言的方式,但相对应的程序运行效率逐渐降低
- 机器语言、汇编语言:这些语言执行效率很高,但移植性很差;
- 编译型语言:C/C++。这种类型的语言更接近人类的使用方式,在不同的机器上也可以跨平台使用。但跨平台有一些难度;
- 解释型语言:Basic、Python。这种类型的语言通过解释器作为中间层,跨平台性很强;
- 脚本语言:bash、csh。不同的平台拥有不同的脚本,本身的功能并不强大,但是很容易把各种语言融合在一起。
C++ 属于编译型语言,需要经历编译和链接的过程,才能变成真正的可执行程序:
数据类型
C++ 中的每个变量都有其数据类型,数据类型决定这个变量所占用内存空间的大小和布局方式、该空间能存储的值的范围,以及变量能参与的运算。
在计算机中,1byte=8bit。我们在说数据类型的大小的时候一般以 byte 作为单位来计算。
计算机中都是用 0、1 这种二进制存储的。日常中我们习惯用 10 进制来看,有时候为了方便,调试过程中更习惯用 16 进制的方式来表示。
名称 | 字节数 | 描述 | 范围 |
---|---|---|---|
char | 1 | 存储字符或者整数,8 位 (bit) | 有符号:-128~127; 无符号:0 ~ 255; |
short | 2 | 短整数,16 位 | 有符号:-32768~32767; 无符号:0 ~65535; |
long | 4 | 长整数,32 位 | 有符号:-2147483648~2147483647; 无符号:0 ~4294967295 ; |
int | 4 | 整数 | 同上 |
float | 4 | 浮点数 | |
double | 8 | 双精度浮点数 | |
long double | 8 | 长双精度浮点数 | |
bool | 1 | 布尔值,只能是真值或假值 | true 或 false |
wchar_t | 2 | 宽字符,这是为存储两字节长的国际字符而设计的类型 |
1 | //常见的数据类型的定义 |
标识符和关键字
C++ 中的标识符是用来标识变量、函数、类、模块,或者任何其他用户自定义项目的名字;
- 一个标识符通常以字母 A~Z 或 a ~z 或下划线_开始,后面跟零个或者多个字母、下划线和数字;
- 一个标识符不允许使用数字开头;
- 一个标识符内不允许出现标点字符,如 @、& 等等;
- 不能混淆大小写,C++ 是区分大小写的编程语言;
- 不能使用 C++ 关键字作为标识符,原则上不允许长度超过 32 位;
标识符命名规则:
- 不要试图发明最好的命名规则,要制定一个让大部分人都满意的命名并在项目组中贯彻执行;
- 标识符应该直观,可以望文知意,尽量使用英文单词组合,不要使用拼音;
- 标识符长度要符合 “min-length&max-information” 原则,长度尽可能短,信息尽可能多
- 变量名字尽可能使用 “名词” 或 “形容词 + 名词” 形式,尽量避免出现数字;函数名尽量使用 “动词 + 名词”
- 可借鉴的命名规则:
- 匈牙利命名法:开头字母用变量类型缩写,其余部分用变量的英文或者英文缩写,要求第一个字母大写,如 int iMyAge;
- Camel (驼峰) 命名法:第一个单词首字母小写,后面单词首字母大写,如 int myAge;
- Pascal 命名法:每个单词的第一个字母都大写,如 int MyAge;
变量与常量
变量
- 变量就是在程序运行过程中,值可以改变的量;
- 变量在程序的执行中可以进行赋值造作,发生变化;
- 变量有一个名字,并在使用之前要说明其类型,一经说明,就在内存中占据与其类型相应的存储单元;
变量定义:
- 首先是类型说明符,随后紧跟一个或者多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束:int m = 1,n = 1;
- 当变量在创建时获得了一个特定的值,我们说这个变量被初始化了。用于初始化变量的值可以是任意复杂的表达式;
- 当一次定义了一个或多个变量时,变量的名字随着定义就可以使用了,如:int m=1,n=1; int sum = m + n;
常量
- 在程序运行过程中,其值一直保持不变的量为常量;
- 常量也区分不同的数据类型;
常量在 C++ 中有两种定义的方法:
- 使用 #define,如:#define PI 3.14
- 使用 const,如:const double PI = 3.14
尽量使用 const 形式定义变量,因为 #define 不会出现在编译时期,在编译出错时不容易排错。define 是 C 语言时期的习惯。
宏定义 | const |
---|---|
宏定义相当于字符替换 | 常量声明 |
预处理器处理 | 编译器处理 |
无安全类型检查 | 有安全类型检查 |
不分配内存 | 分配内存 |
存储在代码段 | 存储在数据段 |
可以通过 #undef 取消 | 不可取消 |
整数常量
整数常量可以是十进制、八进制或者十六进制的常量:
- 前缀指定基数:0x 或者 0X 表示十六进制,0 表示八进制,不带前缀则默认十进制;
- 整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数,L 表示长整数。后缀可以是大写也可以小写,不区分顺序。后缀不能重复。
布尔常量
布尔常量共有两个,他们都是 C++ 关键字,true 代表真,false 代表假。
字符常量
- 字符常量是括在单引号中的。如果常量以 L (仅当大写时) 开头,则表示宽字符常量 (如 L'x'),此时必须保存在 wchar_t 类型的变量中;否则就是窄字符常量 (如 'x'),此处可以存储在 char 类型的简单变量中;
- 字符常量可以是一个普通字符 ('x')、一个转义序列 ('\t')、或者一个通用字符 ('\u02C0')。
- 需要表达一些符号的时候需要用到转义字符;
常见转义字符如下:
转义字符 | 含义 |
---|---|
\\ | \ 字符 |
\' | ' 字符 |
\" | " 字符 |
\? | ? 字符 |
\a | 警报铃 |
\b | 退格键 |
\f | 换页符 |
\n | 换行符 |
\r | 换行符 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ooo | 一到三位的八进制数 |
\xhh... | 一个或多个数字的十六进制数 |