note

对于switch语句,一般有很多种可能的跳转路径(CPU的预测分支会很抓狂),使用跳转表(虚函数、继承、动态规划等都会遇到),具体跳转时可能会用到决策树(if-elseif-elseif-else) 。

  1. x = y>2 等价于 x = (y>2) 不等式为高优先级
  2. 当一个数组作为函数的参数,那么这个数组名就是一个指针变量
  3. 指针:指针——>地址——>计算机底层(更高效)    对指针+1==对指针的值加上它指向对象的字节的大小。
  4. int (*p)[2] //p是指向一个包含两个元素的数组的指针 a pointer to an array                                                                              int *p[3] ——定义了p[0],p[1],p[2]三个指针 array of pointers
  5. p[]与*p比为高优先级;++也比*的优先级高。
  6. putchar(*string++)输出string指向的值
  7. shilf+F11可以跳回刚刚按F11的位置
  8. while(*string)   当string指向空字符('\0')时,*string的值为0,退出循环(常用)
  9. 应用字符串比较函数strcmp(,):一个优点是它比较的是字符串(以'\0'结束,不是字符),而不是数组,可用来比较存放在不同大小数组里的字符串。
  10.  x = rand() % dst.cols;//保证x和y都在src的行数和列数范围内 
     y = rand() % dst.rows;
  11. 指针的作用:

    我想在不同的代码里,都处理这块数据。

    不用某种引用语义,你说怎么办?

  12. 命名是结尾不重要的字母省略eg:travLevel()

  13. long long是标准的8 bytes,不受编译器限制,所以,16位的依然也是8 bytes。

  14. size_t位于std命名空间内,size_t只是一个typedef,是C++计算个数(例如char* based字符串内的字符个数或STL容器内的元素个数),不带正负号unsigned类型。也是vector deque 和string内的operator[]函数接受的参数类型。

  15. virtual意味着等待,直到运行期间才确定调用哪个函数!inline意味着执行前,先将调用动作替换为被调用函数的本体。

  16.  

    default构造函数:要不没有实参,要不就是每个参数都有缺省值(默认值)

  17. 构造函数被声明为explicit,可阻止别用来执行隐式类型转换。

  18. 计算机内存地址为什么要使用8位的16进制,为什么不是10进制?16进制和二进制转换很容易看出来,一位就是4个二进制位。

  19. 结构体对齐:
    (windows)具体对齐的原则是,如果数据类型需要 K 个字节,那么地址都必须是 K 的倍数,比方说这里 int 数组 i 需要是 4 的倍数,而 v 则需要是 8 的倍数。
    (linux)Linux中的对齐策略是“2字节数据类型的地址必须为2的倍数,较大的数据类型(int,double,float)的地址必须是4的倍数”
    根据这种特点,在设计结构体的时候可以采用一些技巧。例如,要把大的数据类型放到前面,假如我们有两个结构体:

    struct S4 {
    	char c;
    	int i;
    	char d;
    } *p;
    struct S5 {
    	int i;
    	char c;
    	char d;
    } *p;

    对应的排列是:
    这样我们就通过不同的排列,节约了 4 个字节空间,如果这个结构体要被复制很多次,这也是很可观的内存优化。

  20. 初始化数组必须用const类型即常量,eg:

    #define WORK_SIZE 1024 
    //用const int WORK_SIZE = 1024
    //有可能会报错error: variably modified ‘work_area’ at file scope
    //char work_area[WORK_SIZE];
    char work_area[WORK_SIZE];

    The reason for this warning is that const in c doesn't mean constant. It means "read only". So the value is stored at a memory address and could potentially be changed by machine code.

  21. linux下,LibreOffice中快捷键F9可以调出目录

  22. 当数组作为函数参数传递时,数组自动退化为同类型的指针

    int GetSize(int data[])
    {
        return sizeof(data);
    }

    返回:4
    解决方案:传递数组的引用

    int GetSize(int (&data)[4])
    {
    	return sizeof(data)/sizeof(data[0]);
    }

    return:4,没什么实用意义。
    非函数参数传递时,不退化,eg

    	int b[4] = { 3,6,7,10 };
    	int bLen = sizeof(b) / sizeof(b[0]);

    bLen = 4;此时b作为sizeof()的参数时,没有进行其他的形参传递

  23. void InsertNode(PListHead l, int val, int pos = 1);
    默认的实参必须放在最后面;
    定义时,不能重复定义int pos = 1了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值