zoukankan      html  css  js  c++  java
  • C/C++

    C篇

    1.1 指针

    指针是一个占四字节的变量,与其他变量的不同就在于它的值是一个内存地址,指向内存的另一个地方。C语言适合底层开发就在于支持指针,能够直接访问内存地址和操作底层的数据,可以通过指针动态分配和释放内存。

    1: typedef struct _node{
    2: int value;
    3: struct _node *next;
    4: }node;
    5: node *pnode=NULL;
    6: pnode=(node*)malloc(sizeof(node));
    7: free(pnode);
    8: pnode=NULL;

    * 数组

    int *a[10] //指针数组,int (*a)[10] //数组指针,char str[] //字符串数组,char *str,**str //字符指针,指向字符串的指针

    int const *a 或 const int *a //指针常量,指针指向的值不能变,int *const a //常量指针,指针本身不能变

    数组是常量指针,int a[10]中a等价于int *const a,a不能变。

    * 引用

    1: int i=1;
    2: int &j=i; //j指向一个i的引用

    引用是没有指针语法的指针,提供对对象的间接访问,为所指对象的一个别名。引用必须初始化,总指向它最初的对象,而指针可以被重新赋值。

    1.2 位运算(&、|、^、~、<<、>>)a.将第n位置位或清零:

    1: #define BITN (1<<n)
    2: 置位:a|=BITN;
    3: 清零:a&=~BITN;

    b.清除整数a最右边的1:a&(a-1)

    c.将一个证书对齐到n:a=(a+n-1)&~(n-1)

    1.3 运算符优先级

    扩建点,单算易比较,胃饥三等点

    1.4 数据对齐

    a.自然对齐(各成员变量存放的起始地址相对于结构的起始地址偏移量的sizeof(类型)整数倍;整体结构是最大sizeof(类型)的整数倍)

    b.强制对齐(#pragma pack())

    1.5 实数:浮点数形式表示

    1: typedef struct _float{
    2: bool Sign:1;
    3: char Exponent:8;
    4: unsigned long Mantissa:23;
    5: }

    1.6 整数:原码/反码/补码,低位优先/高位优先

    1.7 字符

    a.ASCII与UNICODE(utf-8)

    b.char与wchar_t(宽字符)

    c.ANSI_STRING与UNICODE_STRING(宽字符串):通过字符串的长度判断结束

    1.8 溢出:数组溢出、数溢出、缓冲区溢出(strcpy,strcat,strintf)、栈溢出(存放局部变量)、指针溢出(野指针)

    1.9 变量

    全局变量、static变量(静态存储区)的生命周期为整个程序运行期;局部变量(堆栈)在调用后系统自动回收变量所占内存。

    1.10 预编译 #pragma

    #pragma message("..."),#pragma code_seg("INIT"),#pragma hdrstop,#pragma resource "*.dfm"

    1.11 位域

       1:  typedef struct _demo{
       2:    int a:4;
       3:    int b:4;
       4:    int c:2;
       5:  }demo;
     
    C++篇
    2.1 C++与C的区别
    a.数据封装、类的继承、函数多态、函数重载
    b.const与inline替代C中的宏定义#define(宏有二义性,且不能访问对象的私有成员)
    2.2 构造函数、析构函数、赋值函数
    a.默认生成函数(缺省构造函数、析构函数、拷贝构造函数、赋值运算)
       1:  class Nothing{
       2:  };
       3:  class Nothing{
       4:  public:
       5:    Nothing();
       6:    Nothing(const Nothing& rhs); 
       7:    ~Nothing();
       8:    Nothing& operator=(const Nothing& rhs);
       9:  };
    b.成员初始化方法
    1类内初始化
    2类外初始化(静态成员必须在类外初始化)
    3成员初始化列表
    c.赋值运算
       1:  class String{
       2:  public:
       3:    String& operator =(const String &other);
       4:  private:
       5:    char *m_data;
       6:  };
       7:  String& String::operator =(const String &other){
       8:    if(this==&other) return *this;
       9:    deleteb [] m_data;
      10:    int length=strlen(other.m_data);
      11:    m_data=new char[length+1];
      12:    strcpy(m_data,other.m_data);
      13:    return *this;
      14:  }

    2.3 继承和多重继承

    virtual虚继承避免了基类的多重拷贝。

    2.4 多态与虚函数

    多态:从基类派生出来的类所定义的对象对于同一个消息进行不同的操作。

    虚函数:编译器遇到virtual后自动执行动态联编,为virtual函数的类建虚函数表vtable,运行时再决定使用哪个函数。

       1:  class Shape{
       2:  public:
       3:    Shape();
       4:    virtual double Area()=0;
       5:  }
       6:  class Circle:public Shape{
       7:  public:
       8:    Circle(int r){
       9:      m_r=r;
      10:    }
      11:    double Area(){
      12:      return 3.14*m_r*m_r;
      13:    }
      14:  private:
      15:    int m_r;
      16:  }
      17:  class Rect:public Shape{
      18:  public:
      19:    Rect(int x,int y){
      20:      m_x=x;
      21:      m_y=y;
      22:    }
      23:    double Area(){
      24:      return m_x*m_y;
      25:    }
      26:  private:
      27:    int m_x;
      28:    int m_y;
      29:  }
      30:  void main(){
      31:    Shape *p1=new Circle(1);
      32:    Shape *p2=new Rect(2,3);
      33:    cout<<p1->Area()<<p2->Area()<<endl;
      34:  }

    2.5重载(重整)与重写

    重载:允许多个同名函数,根据不同的参数调用不同的函数

    重写:派生类中方法覆盖基类的方法

    2.6 STL模板库

    序列容器:vector,list,deque

    关联容器:set,map

    适配器:stack,queue,priority_queue

    迭代器:iterator

    常用算法:sort(),reverse(),find(),copy()

    vector:数组,连续内存,支持[]操作符,支持尾部操作。

    list:链表,非连续内存,不支持[]操作符,支持任意位置操作。

    deque:队列,支持头部和尾部操作,支持[]操作符。

    set:红黑树,自动排序,multiset允许重复元素。

    map:红黑树,键值对(key-value),multimap允许键重复。

    stack:栈,默认容器deque

    queue:队列,默认容器deque

    2.7 智能指针:auto_ptr,shared_ptr,自动清理内存。

    2.8 a=++i等价于i=i+1,a=i;a=i++等价于a=i;i=i+1

  • 相关阅读:
    pku夏令营面试
    机器学习实验一SVM分类实验
    面试相关-转载-well,yzl——持续更新
    2715:谁拿了最多奖学金-poj
    1005:I Think I Need a Houseboat-poj
    2810:完美立方-poj
    2943:小白鼠排队-poj
    rem+媒体查询---移动端 设计稿以375
    微信小程序 + mock.js 实现后台模拟及调试
    一个div 实现纸张阴影效果
  • 原文地址:https://www.cnblogs.com/jizhiyuan/p/3530986.html
Copyright © 2011-2022 走看看