C++要点

  • 短路逻辑运算符:
    • 了解运算符&&||的真值表:
      x y x&&y x||y
      0 0 0 0
      1 0 0 1
      0 1 0 1
      1 1 1 1
    • 要点:对于常见的编译器,一旦运算符左值表达式的结果可以决定最终结果,将不再进行右值表达式的运算!
      (这就是短路的含义)
  • 递归的识别;
  • ++--的左右放置的区别;
  • 释放动态储存:
    delete EXPRESSIONdelete [] EXPRESSION
  • []优先级问题:
    int *p[5]是一个一维数组,元素是整形int指针;
    int (*p)[5]是一个指针,指向一个5元素int数组;
    区别在于第一个的[]运算符先与p结合,使之变成数组;
  • 多维数组初始化可以省略最高维的长度说明:
    int a[][3] = {1, 2, 3, 4, 5, 6};

手写程序的要点

  1. 想好自己要写什么过程,什么变量储存什么,有什么循环结构,and etc;
    就是像高中数学讲过那样写结构图;
  2. 想好究竟是多函数还是撑死一个main()函数;
    Tag: 撑死在主函数时候会造成语句块过长的问题,容易遗漏或者多写括号;
  3. 想想头文件以及命名组namespace的问题:
    1. //namespace std
      std::cin
      std::cout
      std::string //c++自带的字符串类

    2. //iostream
      std::cin
      //eg. cin.get(); cin.getline(char *, int);
      std::cout
      //eg. cout.put(char *); cout.flush();

    3. //iomanip
      见到什么cout << setw(n);
      或者cout << oct << dec << bin << hex;一流的输出控制都是

    4. //cmath或math.h
      sin(), cos(), tan();
      上面的反函数也有;
      WARNING: 角度为弧度制!!!
      绝对值abs(), fabs();
      后者返回浮点,前者返回整形!!!
      开根sqrt(), 自然对数ln(), e的次方exp();
      常见的数学函数都是它。

    5. //cstdlib或stdlib.h
      int rand();返回一个1000以内伪随机整数,按需用取余;
      取用前用种子进行初始化:
      void srand(unsigned int);
      种子常用时间int time(0); 引用于ctime/time.h

  4. 在一个函数调用另一个函数时候,想一想:
    这个函数在前面提到过没有?如果没有,写上函数原型吧,然后在后面再写上实现也是可以的:

    void b();
    void a() {
    ​ b();
    }
    void b() {
    ​ blablabla;
    }

  5. 表达式括号写够没有?如果忘记了运算符的优先级问题,善用括号;
  6. 语句块(一对花括号)的花括号有没有漏掉或者多写,一层层分析;
  7. 分号!分号!分号!
  8. for语句有三块东西!分号隔开!
    for语句有三块东西!分号隔开!
    for语句有三块东西!分号隔开!
  9. 乘法用星号!乘法用星号!乘法用星号!
  10. 不能使用乘方符号^以及连续不等式a <= x <= c,区别===
  11. 非void函数记得返回哦;
  12. struct与class的定义完了加分号。