C++笔记(10)——循环和关系表达式

1、C语言中,要求for循环使用三个完整的表达式,如for(i=0;i<5;i++),在C++中,第一个表达式可以使用声明,如for(int i=0;i<5;i++)。for循环的循环体,如果是单个语句,可以不用花括号,若是多个语句,则需要使用复合语句(代码块)。

副作用:在计算表达式时对某些东西进行了修改;

顺序点:程序执行过程中的一个点,在进行下一步之前,对所有副作用进行评估,比如分号即为一个顺序点。

2、后缀格式a++和前缀格式++a,前者表示所在表达式计算完成时,再加1,后者表示先加1在计算所在表达式。

对y = (4 + x++) + (5 + x++),括号中不是完整的表达式,所以结果无法保证,只能保证该表达式结束后,x加2。

对效果相同的前缀格式和后缀格式,前缀格式执行速度较快,因为后缀需要编译器先复制一个副本。

3、递增、递减运算符也可用于指针,优先级为:后缀格式>前缀格式=接触引用(*),所以

*++p指针递增再从新地址取值;

++*p先取值,再将所取得值加1;

(*p)++将取的值加1;

*p++指针递增再从旧地址取值。

4、逗号运算符

像代码块一样,将多条语句放在只能放一个表达式的地方。

典型:for(j=0,i=9; j<i; --i,++j)

特性:(1)先计算第一个表达式,在计算第二个表达式,所以逗号也是一个顺序点。

(2)逗号表达式的值为第二部分的值(赋值表达式的值为左侧的值)。

(3)在所有运算符中,逗号运算符优先级最低。

如cat = (17,240;,则cat的值为240.

5、C-风格字符串的比较

像word=="mate",其中word是数组名,数组名是地址,引号括起来的字符串常量也是地址,该表达式实际在比较两个地址是否相等而不是两个字符串是否相等。

对C-风格的字符串进行比较,使用strcmp()进行比较,其参数可以是指针、数组名或字符串常量,比较的是字符串,而不是地址,与数组长度无关。

如果两个字符串相等,则返回0;

如果第一个字符串按字母顺序在第二个之前,则返回负值;

如果第一个字符串按字母顺序在第二个之后,则返回正值;(在ASCII编码中所有大写字母在小写字母之前。)

6、string类字符串

string类字符串可以直接使用关系运算符进行比较。而且,关系运算符两侧的操作数只要有一个string对象即可,即string类字符串也可以和C-风格字符串直接运用关系运算符进行比较。

7、延时的实现

#include <time.h>

#include <iostream>

using namespace std;

int main()

{

float secs_set;

clock_t delay = secs_set*CLOCK_PER_SEC;

clock_t start = clock();

while( clock()-start<delay )

      ;

return 0;

}

8、类型别名

为类型建立别名有两种方式,一种使用#define,另一种使用typedef,typedef不创建新类型,只为新类型创建新名字。

#define BYTE char

typedef char BYTE;

这种方式,将BYTE定义为char的别名,编译器之后将所有的BYTE替换成char。

也可以将byte_point声明为char指针,

typedef char * byte_point1;

#define byte_point2 char *

之后声明单个char指针变量时,

byte_point1 a;

或byte_point2 a;

但,一起声明多个指针变量时,只能用

byte_point1 a,b;

而byte_point2 a,b;则将a声明为char指针,将b声明为char类型变量。

 

9、基于范围的for循环

使用方式:

double prices[5] = {9.2,3.2,4.5,6.9,3.0};

for(double x : prices)

{cout<<x<<std::endl;}

如果需要改变数组内容:

for(double &x : prices)

{x=x*2;}

符号&表示引用变量而不是取地址。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值