前缀格式与后缀格式
对于表达式:后缀如 i++ 表达式的值仍是 i,在遇到下一个顺序点后再将 i 加1。前缀 ++i 表达式的值就是(i+1),先计算表达式的值,不需要等待 顺序点。
对于类:前缀函数效率比后缀函数高,后缀函数需要首先复制一个拷贝,加 1 完成后将复制的拷贝返回。而前缀函数是将值加 1 再返回结果,不需要拷贝。
对于指针: * 和 ++前缀 、--前缀的优先级相同,以从右到左的方式结合。这意味着:
- *++pt 表示先对 pt 指针加 1 ,再取加 1 后的 pt 指向的值。
- ++*pt 表示先取 pt 指针指向的值,再对 pt 指向的值加1。
++后缀和--后缀优先级相同且高于前缀。这意味着:
- (*pt)++ 表示先取pt指向的值,再对这个值加 1 。
- *pt++ 中++操作符先作用于pt,但是由于是后缀操作符,所以仍然取pt指向的值,在执行到下一个顺序点后,再对pt加 1 。
逗号操作符
逗号表达式的值是第二部分的值,如 i = ( 10, 200 );i 的值是200。但是逗号操作符的优先级最低,所以如 i = 10, 200; i 的值为10。
字符串比较
Char数组的数组名与字符串比较不能使用==操作符,应使用strcmp();若字符串相等,则返回0;若字符串不相等则返回1。
strcmp(str1,str2);
strcmp(str1,str2)<0;则str1在str2前面。
strcmp(str1,str2)>0;则str1在str2后面。
类型别名
C++的两种方式:
- 预处理器方式:使用#define aliasName typeName
这种方法使得程序在编译时用typeName替换掉aliasName。但是这仅仅是字符的替换,也就是说对于一系列变量的声明不适用。
例如:#define FLOAT_POINTER float *
FLOAT_POINTER pa, pb;
只是替换为 float * pa, pb; 这时pa是一个指针,然而pb还是一个float变量。
2. typedef typeName aliasName;
这种方法能处理复杂的类型别名。
逻辑操作符
||和&&都是顺序点,即先计算左侧的值再进行右侧的判断。
&&操作符优先级高于||。
?:操作符
C++中唯一一个需要三个操作数的操作符。
ex1 ? ex2 : ex3
若ex1的值为true,则表达式值为ex2的值;
若ex1的值为false,则表达式值为ex3的值。
switch细节相关
标签必须是单独的整数(包括char和enum)。
case只是行标签,跳到该标签后将依次执行之后的所有语句除非用break跳出。
如果标签均不匹配,则跳到default处执行;如果此时没有default,则跳出switch执行之后的语句。