zoukankan      html  css  js  c++  java
  • [原创] 程序员面试宝典:第六章 预处理,const,sizeof

    1. 求成员在struct中的偏移量:

    • #define FIND(struc, e)    (size_t) &( ((struc *)0)->e)
    • (struc *)0    将常量0强制转化为 (struc *) 指向的地址(将结构体起始位置强制指定为0)
    2. 宏定义中,常量如果过长,需要指定使用长整型
    • #define SECOND (60 * 60 * 24 * 365)UL    // UL表示使用 unsigned long
    3. define MIN(A,B) ( (A)<(B) ? (A) : (B) )
    • 带参数宏定义也是简单替换,要更加注意括号
    4. const 修饰符:
    • const 变量:不可改变,必须初始化,因为初始化之后,就不能变了。
    • const 参数:函数内部不可改变这个参数的值。(虽然这个参数本身是拷贝实参)
    • const 返回值:用来初始化一个const变量。
    • const 指针:int * const p,指针本身指向不可变,指向的内容可变。
    • 指向 const 的指针:const int * p,指针本身指向可变,指向的内容不可变
    • const 成员函数:void fun() const,函数的this指针为指向 const 对象的 const 指针,所以不改变类中数据成员,但若将数据成员用mutable修饰,就可以改变了。
    • const 成员变量:必须初始化,因为之后无法改变,需要在类外部定义,定义在头文件(因为有可能编译器会进行直接常量替换)
     
    5. char s[] = "0123456789";    sizeof(s) = 11
    • 别忘了'\0', 系统自动添加(初始化过程)
    7. sizeof操作符:
    • 结果类型为 size_t,一般表示 unsigned int
    • 可用于:数据类型名,变量,函数
      • 作用于变量时,发生类似于宏定义的替换: int a = 6;  sizeof(a) --> sizeof(int)
      • 作用于函数时,返回值类型
    • sizeof(a = 8)    a = 8不会被计算! 发生了替换,不会被编译。
    • sizeof(int a[100]) 为 400
    8. 类占有的空间大小:
    • 类的对齐原则与结构体对齐原则相同
    • class中,仅包含非static变量(static 存储在数据区
    • 虚函数、虚继承都要用到虚表,增加一个虚指针
    9. C++中对于宏的替代选择:
    • 内联函数    -->    带参数宏
    • const常量  -->    不带参数宏
    • 做类型检查            简单替换
    10. 内联函数应该在头文件中定义(而不是像一般函数在cpp中定义),因为编译器需要展开。
    • inline int fun(int a) {...}
     
  • 相关阅读:
    sklearn库学习笔记1——preprocessing库
    juypter notetbook
    信用卡欺诈
    matplotlib1
    python一行输入多个数
    pandas数据预处理
    pandas基础用法
    numpy简单用法2
    numpy 简单用法
    简单循环
  • 原文地址:https://www.cnblogs.com/icemoon1987/p/2709568.html
Copyright © 2011-2022 走看看