所以燃

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

posted on 2014-01-23 12:50  Jizhiyuan  阅读(310)  评论(0编辑  收藏  举报

导航