经常考到的几种区别

1 引用和指针的区别

1)引用不可以为空,必须初始化,指针可以为空,所以在使用指针之前,为了安全起见,一般要做非空判断

2)引用不可以改变指向,但是指针可以,常指针不可以改变指向

3)引用是个别名,不占内存空间,而指针用于自己的内存空间

4)指针和引用++和--的含义不同

5)能建立指向数组的指针,但是不能建立数组的引用

6)引用比指针更安全

由于不存在空引用,一旦初始化后其指向就不会改变,但指针可以改变指向,可以为空,在使用钱一定要加一判断,

attention·:

指针出现错误的几种常见行为:

1)对个指针指向同一块内存

2)没有初始化,导致野指针

3)对此释放同一块内存

使用引用需要注意的问题

使用引用最常用的两种地方是:函数参数和返回值

最为返回值时需要注意:1)不要返回局部变量的引用2)不能返回函数内部new的引用,会导致无法释放内存

2 mew和malloc的区别

1)new是操作符而malloc是函数
2)在申请内存失败的时候,mallo返回空指针,但是new会抛出异常
3)new可以调用初始化函数,但是malloc不可以
4)new能自动确认申请的指针的大小,但是malloc需要用户自己设定且指定返回类型

3 栈和堆的区别

1)内存分配方面的区别
栈:由编译器自动申请和释放;堆:有程序员来申请和释放
2)系统响应方面
栈:速度快,但是不受程序员控制
堆:速度慢,但是程序员自己控制,意产生内存碎片
3)栈:有高地址向低地址扩展;堆:低地址向高地址扩展
4)
栈:只要栈还有剩余的内存空间,就会分配,分配失败会提示栈溢出
堆:系统有一个记录空闲地址的头地址的链表,当申请内存时,遍历链表找到第一个够大小的内存块,然后申请,一般第一个位置会记录申请了多少,以便以后释放

4 重写,隐藏,重载的区别

1):隐藏:其实就是覆盖的意思,要求两个函数同名,其他无限制两个函数为与不同的作用域,内存作用域会隐藏外层作用域里面的函数,而且作用域检查优先于类型检查
2)重载:在同一作用域,两函数的函数名相同,但是参数列表不同
3)重写:即不同作用域,返回类型,函数名,函数列表均相同,加上virtual修饰,实现多态

5 sizeof和strlen的区别

1)sizdof即可以是变量们也可以是类型名,且计算的是真实内存大小

2)strlen计算的是以‘、0’结尾的字符串的长度

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值