《C++PP》学习笔记3第五章循环和关系表达式

96 阅读1分钟

对于内置类型,使用前缀式和后缀式没有区别,但对于用户定义类型,如果有用户定义的递增和递减运算符,则前缀式的效率更高。

区分以下几个

* ++pt //先++后*解引用

++ * pt //先*后++

( * pt)++ //先*后++

x= * pt++ //先++后* 然而x的值却是没++前的pt的地址解引用的值,但执行该语句后,pt的值变。

区分=和==

比较字符串不能用==,要用 strcmp(),比较字符可以使用

strcmp()

如果str1和str2相等,则strcmp(str1,str2)==0返回true

如果不相等,则!=0和strcmp()返回true

如果str1在str2前面,则strcmp(str1,str2)<0返回true

如果str1在str2前面,则strcmp(str1,str2)<0返回true

如果str1在str2后面,则strcmp(str1,str2)>0返回true

string类可以用!=和==进行比较

while(){}先判断再循环

while(name[i])有时候比while(name[i] != '\0')效率高

do while先循环一次再看条件

类型别名

(1)使用#define BYTE char 系统会使用所有char替换BYTE

(2)typedef char byte

define可能出现的问题:

#define FLOAT_POINTER float *;

FLOAT_POINTER pa,pb;

预处理器置换将该声明转换为:float * pa,pb;

基于范围的for循环

for(int x : {1,2,3,4,5)}{}

int price={1,2,3,4};

for(int &x : prices){ x=x*0.8};

文本输入的问题:

直接使用cin输入字符串,cin将忽略空格和换行符。可以使用cin.get(char)补救