1. 指针和引用的区别
- 一个指针可以被多次赋值,但是引用只可以在创建的时候就必须初始化,初始化完毕后就不可改变;
- 一个指针有它自己的内存地址和栈上的大小(x86上面为4byte),但是引用与原有变量共享相同的内存地址,但是在栈上仍然占用一些内存空间。
- 指针可以指向NULL,但是引用必须引用一个有效的对象;
- 一个指针需要使用*来访问它指向的内存地址,但是引用可以直接使用它引用的对象。指向类或者结构体的指针使用"->"来访问它的成员函数,而引用使用"."来访问
2. strlen和sizeof的区别
- sizeof是运算符,strlen是函数;
- 数组做sizeof的参数不退化,当数组传递给strlen就退化为指针了;
- sizeof的值在编译时即计算好了,而strlen要在运行时才能得到结果;
- sizeof可以用任何类型做参数,strlen只能用char*做参数,且必须是以"\0"结尾;
3. C中的malloc和C++中的new的区别
- new、delete是操作符,可以重载,只能在C++中使用;
- malloc、free是函数,可以覆盖,C、C++中可以使用;
- new可以调用对象的构造函数,对应的delete调用相应的析构函数;
- malloc仅仅分配内存,free仅仅回收内存,并不执行构造函数和析构函数;
- new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。
4. C++中的拷贝构造函数
拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的第一个参数必须是本类型的一个引用变量。什么时候会调用拷贝构造函数呢?
- 对象以值传递的方式传入函数;
- 对象以值传递的方式从函数返回;
- 对象需要另外一个对象进行初始化;
参考资料:
1. 点击打开链接
2. 知乎一篇文章中蓝色的回答写的很好