补习算法基础,学习邓肯的球风,扎实的大基本功~
- 比较大的数组声明在main函数之外
- 做一件事之前检查是否可以做,而不是做完之后不行再回退
前++和后++:
i++ 与 ++i 的主要区别有两个:
1、 i++ 返回原来的值,++i 返回加1后的值。
2、 i++ 不能作为左值,而++i 可以。
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。一般来说,左值是可以放到赋值符号左边的变量。但能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。比如,
int i = 0;
int *p1 = &(++i); //正确
int *p2 = &(i++); //错误++i = 1; //正确
i++ = 5; //错误i++ 最后返回的是一个临时变量,而临时变量是右值。
全部清零或者批量清零,可以用memset(a,0,sizeof(a)),a是一个数组
++ – += 等可以修改变量值的运算符的滥用可能会带来意向不到的问题,每条语句最多使用一个这样的运算符,且此运算符修改的变量最多在语句中出现一次。
例:
神奇的例子
int count = 0;
std::cout <<count++<<count++<<count++<<std::endl;
结果是 210 想不到吧~
int count = 0;
std::cout <<count++<<count++<<count<<std::endl;
结果是 102
int count = 0;
std::cout <<++count<<++count++<<++count<<std::endl;
结果是 333
换成
printf("%d %d %d\n",count++,count++,count++)
依然是2 1 0编译选项-WALL TODO
不同操作系统的回车换行符并不一致,Windows是\r和\n两个字符,在Windows下读Windows文件,fgetc()和getchar()会把\r“吃掉”,只留下\n,但在LINUX下读同样一个文件,会先读取\r,再读取\n。
- gets(s)存在缓冲区溢出的漏洞,不要使用
- 复杂的字符串处理,常使用预处理的方式简化输入。
- 迭代式开发,每次只实现一点功能,但要充分测试,保证它工作正常。
- 测试驱动开发
- 标准输入流cin比文件流fin慢得多
- cstdio和stdio.h并不等同,并不是头文件对应于c语言和c++的两个不同名字,有些许差别,但是平常用不太到。
- 使用time.h和clock()和函数可以获得程序运行时间,常数CLOCKS_PER_SEC和操作系统功能相关,不要直接使用clock()的返回值。
- -