1. C和C++的一些区别
参考https://blog.csdn.net/cherrydreamsover/article/details/81835976
new、delete 和 malloc、free 的区别和联系:

  1. malloc和free是C语言标准函数库中的两个函数,new/delete是C++语言中两个运算符。
  2. malloc/free和new/delete都是用来申请动态内存的。
  3. new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free 也不会调用析构函数。
  4. malloc得到的指针无类型,new出来的指针是带有类型信息的。
  5. 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时 要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
  6. 如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如 果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。所以new/delete 必须配对使用,malloc/free也一样。

2. 引用与指针的区别

  1. 指针在运行时可改变所指向的对象,引用一旦与某个对象绑定后就不能再改变。
  2. 指针指向一块内存,内容是所指向内存的地址,引用是某块内存的别名。
  3. 有空指针,无空引用。
  4. 对引用使用“sizeof”得到的是变量的大小,对指针使用“sizeof”得到的是变量的地址的大小。
  5. 理论上指针的级数没有限制,但引用只有一级。即不存在引用的引用,但可以有指针的指针。
    int **p //合法
    int &&p //非法
  6. ++引用与++指针的效果不一样。
    例如就++操作而言,对引用的操作直接反应到所指向的对象,而不是改变指向;而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容。