指针和引用的区别
- 指针是一个变量,存储的是一个地址,引用跟原来的变量实质上是同一个东西,是原变量的别名
- 指针可以有多级,引用只有一级
- 指针可以为空,引用不能为NULL且在定义时必须初始化
- 指针在初始化后可以改变指向,而引用在初始化之后不可再改变
- sizeof指针得到的是本指针的大小,sizeof引用得到的是引用所指向变量的大小
- 指针做函数参数传递时,是将实参进行拷贝传给形参,两者指向的地址相同(可以在·函数体内改变指向不影响实参,当然改变值还是会影响的,因为是同一块地址)。而引用不行。
堆和栈的区别
作为内存来说:
堆是由程序员创建和释放的,而栈是系统自动释放
堆的内存比较大,栈空间一般比较小
栈的执行效率一般比较高,分配速度快
堆的碎片化内存比较多,分配灵活
堆的方向是向上生长,栈向低地址方向生长
栈有静态分配和动态分配,静态分配由编译器完成(如局部变量分配),动态分配由alloca函数分配,但栈的动态分配的资源由编译器进行释放,无需程序员实现。堆只有动态分配
C++中四种类型转换机制
c++的类型转换可以分为显示类型转换和隐式类型转换,四种强制类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。
static_cast < type-id > ( expression ):该运算符把表达式转换为type-id类型,在编译时使用类型信息执行转换,在转换执行必要的检测(指针越界,类型检查),其操作数相对是安全的。
dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针,它是在运行时检查的。
const_cast:去除const常量属性
reinterpret_cast<char*>(n):该运算符十分危险,reinterpret_cast 运算符并不会改变括号中运算对象的值,而是对该对象从位模式上进行重新解释.