for循环
- for循环的步骤:1)设置初始值;2)执行循环,看看循环是否应当继续进行;3)执行循环操作;4)更新用于测试的值。
for(initialization; test-expression; update-expression)
body
- C++表达式是值或值与操作符的组合,每个C++表达式都有值。
- 只要加上分号,所有的表达式都可以成为语句,但不一定有编程意义。
- 在循环结束时,for循环控制部分声明的变量将过期。
while循环
while ( test-condition )
body
- 在C++中,for和while循环本质上是相同的。
while ( test-expression)
body
等价于
for ( ; test-expression; )
body
- for循环需要3个表达式,不过他们可以是空表达式,只有两个分号是必需的。
do while 循环
- do while循环是出口条件循环,是先执行循环体,然后再判断测试表达式,决定是否应继续执行循环。这样的循环通常至少执行一次。
do
body
while(test-expression);
类型别名
- C++为类型建立别名的方式有两种。
- 1)使用预处理器:#define BYTE char; 这样,预处理器将在编译程序时用char替换所有的BYTE,从而使BYTE成为char的别名。
- 2)使用C++的关键字typedef来创建别名:typedef typeName aliasName;
关系表达式
- 计算机能够对值进行比较,这种能力是计算机决策的基础。
- C++提供了六种关系操作符:<,<=,==,>,>=,!=。
- 关系操作符的优先级比算术操作符低。
递增操作符(++)和递减操作符(–)
- 前缀(prefix)版本,++x:先将x的值加1,然后使用新的值来计算表达式。
- 后缀(postfix)版本,x++:先使用x的当前值计算表达式,然后将x的值加1。
- 注意不要在同一语句对同一个值递增或递减多次。规则“使用后修改”和“修改后使用”可能会模糊。
副作用和顺序点
- 副作用(side effect)指的是在计算表达式时对某些东西(如变量的值)进行了修改。
- 顺序点(sequence point)是程序执行过程中的一个点,在这里,进入下一步之前确保对所有的副作用都进行了评估。
- 在C++中,语句中的分号就是一个顺序点。任何完整的表达式末尾都是一个顺序点。
- 完整表达式:不是另一个更大表达式的子表达式。
- 表达式语句中的表达式部分以及while循环中检测条件的表达式都是一个完整表达式。
int guests = 10;
while (guests++ <= 10)
cout << guests;//输出 11;
- 在for循环中,++i 和 i++在逻辑上没有任何区别,最终效果相同。但是在执行速度上可能有细微的差别。前缀版本是将值加1,然后返回结果;后缀版本是首先复制一个拷贝,将其加1,然后将复制的拷贝返回。C++允许你针对类定义这些操作符,所以对于内置类型,采用哪种格式不会有差别;但对于用户定义的且有用户定义的递增和递减操作符的类型,前缀格式效率更高。
递增/递减操作符和指针
- 可以将递增操作符用于指针和基本变量。
- 将递增操作符用于指针时,将把指针的值增加其指向的数据类型占用的字节数。
- 指针递增和递减遵循指针算术规则。因此,如果pt指向某个数组的第一个元素,++pt 将修改pt,使之指向第二个元素。
- 前缀递增、前缀递减和解除引用操作符的优先级相同,以从右到左的方式进行结合。后缀递增和后缀递减的优先级相同,但比前缀操作符的优先级高,以从左往右的方式进行结合。
组合复制操作符
操作符 | 作用(L为左操作数,R为右操作数) | 操作符 | 作用(L为左操作数,R为右操作数) |
---|
+= | 将L+R赋给L | /= | 将L/R赋给L |
-= | 将L-R赋给L | %= | 将L%R赋给L |
*= | 将L*R赋给L | | |