基础小记

来源:互联网 发布:linux shell 变量 编辑:程序博客网 时间:2024/06/11 20:21

补习算法基础,学习邓肯的球风,扎实的大基本功~

  • 比较大的数组声明在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()的返回值。
  • -