C++面试小问题(1)

指针和引用的区别

  • 指针是一个变量,存储的是一个地址,引用跟原来的变量实质上是同一个东西,是原变量的别名
  • 指针可以有多级,引用只有一级
  • 指针可以为空,引用不能为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 运算符并不会改变括号中运算对象的值,而是对该对象从位模式上进行重新解释.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值