指针与引用的区别

引用和指针有两个重要的语义区别:

  • 对指针赋值是修改指针的指向,不会影响当前指正指向的对象;对引用赋值是直接修改引用所指向的对象,即在S& r = s后再执行r = ...跟执行s = ...是没有区别的。
  • 指针可以为空(初始化为NULL或nullptr),但是引用不允许为空,必须在初始化时立即绑定到一个对象上,并且引用的绑定关系后续不可更改。你也不可以利用转型之类的技巧让引用指向不存在的对象,这会导致未定义行为。
    在实践中,我们常常根据第二点来决定一个函数形参的类型:如果调用者必须提供一个有效参数值,我们就使用引用;如果调用者可以不提供该参数(通常用传递nullptr来表示),我们就是用指针。

关于const在指针和引用上的使用

  • 1.const char*char const*,这两种写法指代同一种类型,都表示指向不可变的字符数据的指针。const限定左侧有类型时,它限定左侧的类型;否则,它限定右侧的类型(引用也同理)
  • 2.由上述第一条规则,我们得出char* const p是表示p是一个常量指针,表示指针是常量,无法修改,但是可以修改它所指向的值。
  • 3.引用没有char& const写法,因为引用本来就是不可更改的,不需要多此一举。
posted @ 2025-03-11 20:45  ydqun  阅读(73)  评论(0)    收藏  举报