C++ 循环和关系表达式(四)上

11.i++和++i、- -i和i- -
++:递增运算符(increment operator)
- - :递减运算符(decrement operator)
在这里插入图片描述
在这里插入图片描述

i++:先取值再加1
++i:先加1再取值
i- - :先取值再减1
- -i :先减1再取值

2.for循环
C++语法将整个for看作一条语句,虽然循环体可以包含一条或多条语句
在这里插入图片描述
可以理解成for(初始化;测试表达式;更新测试的值)

在这里插入图片描述
如图所示,首先
①初始化i=0;(loop initiallization)
②执行测试i<5,看看循环是否应当继续进行,显然可以继续进行(loop test)
③执行循环体,花括号{}内的语句(loop body)cout<<“handsome->zhou”<<endl
④更新用于测试的值i++(loop update)

其中测试表达式部分在C++中,并没有被限制只能为真或假,可以使用任意表达式,只不过C++将把结果强制转换为bool类型,因此值为0的表达式将被转换为bool值false,导致循环结束。
在这里插入图片描述
3.表达式与语句
在这里插入图片描述
从b的赋值表达式来看,C++是允许这么做的,但不意味着应鼓励这么做
x=y=z可以看出赋值运算符是从右向左结合的。

在这里插入图片描述
cout在显示bool值之前将它们转换为int,但cout.setf(ios::boolalpha)函数调用设置了一个标记,该标记命令cout显示true和false,而不是1和0

在这里插入图片描述
x+5;是一条有效的C++语句,只不过没有完成任何有用的工作

4.非表达式和语句

在这里插入图片描述
5.回到for循环

⭐修改步长
在这里插入图片描述
⭐访问字符串
在这里插入图片描述
6.递增递减的特殊情况

在这里插入图片描述
7.副作用和顺序点
副作用(side effect)指的是在计算表达式时对某些东西(如存储在变量中的值)进行了修改;
顺序点(sequence point)是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用都进行了评估,在C++中,语句中的分号就是一个顺序点。

在这里插入图片描述
8.前缀格式和后缀格式

在这里插入图片描述
这里前缀和后缀的副作用都是在程序进入下一步之前完成,这里看上去效果是相同的。但执行速度可能会有细微的差别,对于内置类型和当代的编译器而言,这看似不是什么问题。C++允许你针对类定义这些运算符,在这种情况下,用户这样定义前缀函数:将值加1返回结果;但后缀版本会先复制一个副本将其加1,然后将复制的版本返回,故对于类而言,前缀版本的效率比后缀版本高。所以对于内置类型采用哪种格式不会有差别;但用于用户定义的类型,如果有用户定义的递增和递减运算符,则前缀格式的效率更高。

9.递增/递减运算符和指针

用以下两张图解释

在这里插入图片描述
在这里插入图片描述
10.复合语句

在这里插入图片描述
代码块由一对花括号和它们包含的语句组成,被视为一条语句,从而满足句法的要求。
所以一条复合语句就是用两个花括号来构造而成的

在这里插入图片描述
可以看出在语句块中定义一个新的变量,则仅当程序运行该语句块中的语句时,该变量才存在.

在这里插入图片描述
在执行语句时语句声明的新变量x会隐藏旧变量;在外部语句旧变量再次可见。

11.逗号运算符
逗号运算符允许将两个表达式放到C++句法只允许放一条语句的地方。

在这里插入图片描述
下面列举一个反转string类对象的内容的例子

在这里插入图片描述
在这里插入图片描述
在所有运算符中,逗号运算符的优先级是最低的

12.关系表达式
关系运算符<、<=、==、>、>=、=
关系运算符的优先级比算术运算符低
在这里插入图片描述
x+3 > y-2 对应于 (x+3) > (y-2) 而不是x+(3>y)-2

需要小心:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一个for循环是正确的,当数组遇到19则会结束循环
第二个for循环是测试表达式永远为真,因为永远赋值为20,所以会无限循环。最糟糕的是,该程序可能导致其他应用程序无法运行,导致不得不重新启动计算机

13.C风格字符串的比较

在这里插入图片描述
前面有提到过数组名是数组的地址,同样的上面的关系表达式不是判断两个字符串是否相同,而是查看它们是否存储在相同的地址上。两个字符串的地址是否相同呢?答案是否定的,虽然它们包含相同的字符。
应该使用C风格字符串库中的strcmp()函数来比较。该函数接受两个字符串地址作为参数。这意味着参数可以是指针、字符串常量或字符数组名。
在这里插入图片描述
两个字符串即使存储在长度不同的数组中,也可以是相同的
在这里插入图片描述
for循环的测试条件使用strcmp()

在这里插入图片描述
事实上测试表达式strcmp()判断出两个字符串不相同取值不为0即取true
这样的话可以看出比计数循环要方便的多

—————————————————————————上一篇:C++ 复合类型(三)下

—————————————————————————下一篇:C++ 循环和关系表达式(四)下

  • 0
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页

打赏

精神小伙的青春

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值