C++ 指针

(主要整理的是个人不太懂的地方)

野指针和悬空指针

指针指向了一块随机的空间,不受程序控制。

  • 野指针:未初始化的指针,其指针内容为一个垃圾数,不能确定其具体指向。野指针不能判断是否为NULL来避免。要避免只能记得赋初值。

  • 悬空指针:指针正常初始化,曾指向一个对象,该对象被销毁了,但是指针未制空,那么就成了悬空指针。

    • 因为在 free§ 之后,p 指针仍然指向之前分配的内存,如果这块内存暂时可以被程序访问并且不会造成冲突,那么之后使用 p 并不会引发错误。
    • 为了避免出现“悬空指针”引发不可预知的错误,在释放内存之后,常常会将指针 p 赋值为 NULL:
指针常量和常量指针
  • 指针常量:指针类型的常量,指针本身是个常量。指针本身不可以改,但指向的内容可以改。int* const p = &a,即指针类型是int *,但是该指针是个 const。
  • 常量指针:指向常量的指针。指针本身可以改,就是可以指向另一个地址,但指针指向的该块地址的内容不能改。const int *p = &a 或者 const int *p = &a,即指针指向的类型是 const int,是个常量。
函数指针和指针函数
  • 指针函数:返回指针的函数
  • 函数指针:指向函数的指针

指针和引用的区别

  • 本身内容上:指针指向一块内存,指针所存内容为所指内存的地址;引用是某块内存的别名,就是这块内存的另一个名字,跟原来的名字算是一样的,都指的这块内存
  • 可否改变:指针所指向的内存空间可以改变,就是可以改成指向另一块内存空间;引用所绑定的对象一旦绑定就不能改变了
  • 是否占空间:指针本身在内存中占有内存空间;引用相当于变量的别名,在内存中不占空间(变量本身是已经有了,引用只是给了一个名字)
  • 可否为空:指针可以为空(没指向内存空间的空指针);引用必须绑定对象
  • 可否多级:指针可以有多级(指针的指针);引用只能一级(就不能有引用的引用,因为本身不是一个变量)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值