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;}
符号&表示引用变量而不是取地址。