- 图片都出自C++ Primer第五版。
1、注释
单行注释:语句开头加上//
注释(comment)插⼊在程序代码中,⽤来向读者提供解释信息。它们对于程序的功能没有任何影响,但是往往能使得程序更容易被⼈类读者理解。
多行注释:多⾏注释由⼀对字符序列“/*”开始,以“*/”结束。
/*
......
*/
2、变量
变量是⼀个保存数据的地⽅,当我们需要在程序⾥保存数据时,就需要⼀个变量来保存它。⽤⼀个变量保存了数据,它才能参加到后⾯的计算中。
变量提供了一个具名的、可供程序操作的存储空间。
对C++程序员来说,"变量"和"对象"一般可以互换使用。
2.1变量定义
变量定义的⼀般形式就是:首先是类型说明符,随后紧跟由一个或多个变量名组成的列表,变量名用逗号分隔,最后以分号结束。
例:
2.2变量名和标识符
变量的名字是⼀种“标识符”。
构造基本原则:
- 标识符不能是关键字
- 标识符只能由字母、数字、下划线组成
- 第一个字符必须为字母或下划线
- 标识符中字母区分大小写
- 关键字(有的地⽅叫它们保留字)不可以⽤做标识符。
2.3变量初始化
当对象在创建时获得了一个特定的值,这个对象就被初始化了。用于初始化变量的值可以是任意复杂的表达式。
一般形式:
例:
初始化不是赋值,初始化时创建变量是赋予一个初始值;赋值含义是把对象的当前值擦除,用一个新值来替代。
建议初始化每一个内置类型的变量。
3、数据类型
C是⼀种有类型的语⾔,所有的变量在使⽤之前必须定义或声明,所有的变量必须具有确定的数据类型,否则无法给变量分配内存。数据类型表⽰在变量中可以存放什么样的数据,变量中只能存放指定类型的数据,程序运⾏过程中也不能改变变量的类型。
基本字符类型是char,1个char能存放机器基本字符集中任意字符对应的数字值,所以1个char的大小和一个机器字节一样。
3.1带符号类型和无符号类型
除布尔型和扩展的字符型外,其他整型可以划分为带符号的和无符号的两种。带符号的可以表示正数、负数和0,无符号只能表示正数和0。
基本类型前添加unsigned可以得到无符号整型。其中unsigned int可以简写为unsigned。
字符型被分为三种:char、signed char和unsigned char。
3.2如何选择类型
- 明确知道数值不可能为负时,选用无符号类型;
- 使用int执行整数运算,如果数值超过int的表示范围,选用long long;
- 算数表达式中不要用char或bool;
- 浮点数运算用double。
3.3注意事项
- 在显示字符型变量时,用单引号将字符括起来,不要用双引号
- 单引号内只能有一个字符,不可以是字符串
- 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元
- 不要混用带符号类型和无符号类型!(表达式中不要同时出现带符号和无符号类型)
3.4转义序列
两类不能直接使用的字符:不可打印的字符(退格、换行);特殊含义的字符(引号、问号)
转义序列:
4、表达式
4.1定义:
一个表达式是⼀系列运算符和算⼦的组合,⽤来计算⼀个值。
- 运算符(operator)是指进⾏运算的动作,⽐如加法运算符“+”,减法运算符“-”。
- 算⼦(operand)是指参与运算的值,这个值可能是常数,也可能是变量,还可能是⼀个⽅法的返回值
- 一元运算符:作用于一个运算对象的运算符(& *)
- 二元运算符:作用于两个运算对象的运算符(== +)
- 左值和右值(后面介绍)
4.2算数运算符
算数表达式可能产生未定义的结果。原因一:数学性质本身(除数为0);原因二:计算机的特点(溢出)
4.3逻辑和关系运算符
逻辑与和逻辑或的注意事项:当且仅当运算对象无法确定表达式的结果时才会计算右侧运算对象的值。
- 关系运算符比较对象的大小关系并且返回布尔值。
- 进行比较运算是除非比较对象是布尔类型,否则不要使用布尔字面值true和false作为运算对象。
4.4赋值运算符
赋值运算符的左侧运算对象必须是一个可修改的左值。
5个算术运算符,+ - * / %,可以和赋值运算符“=”结合起来,形成复合赋值运算符
例:“+=”、“-=”、“*=”、“/=”和“%=”
total
4.5递增递减运算符
“++”和“--”是两个很特殊的运算符,它们是单目运算符,这个算⼦还必须是变量。
这两个运算符分别叫做递增和递减运算符, 他们的作⽤就是给这个变量+1或者-1
前缀后缀
++和--可以放在变量的前⾯,叫做前缀形式,也可以放在变量的后⾯,叫做后缀形式。
前置范本得到递增之后的值;后置版本得到递增之前的值。
int i = 0, j;
j = ++i; //j = 1, i = 1
j = i++; //j = 1, i = 2
尽量使用前置版本的递增、递减运算符。
4.6类型转换
什么情况下发生隐式转换:
- 比int类型小的整数提升为较大的整数类型(整数提升)。
- 条件中,非布尔值转换为布尔类型
- 初始化时,初始值转换为变量的类型
- 赋值语句中,右侧运算对象转换成左侧运算对象的类型
- 如果算数运算或关系运算有多种类型,需要转成同一种。
- 大多数用到数组的表达式中,数组自动转换成指向数组首元素的指针
尽量不适用显式转换。
4.7优先级
C++Primer第五版147页。
一般可以:
:: > ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
运算优先级不好确定,就用()限定。避免出现很复杂的需要判断运算优先级的表达式