C++ 引用和指针的区别

什么是引用

“引用是变量的别名”,如:

int n = 10;
int &m = n;

在这里,m完全等价于n,任何对m的操作都是对n的操作;

引用的特性

  • 引用必须初始化
  • 引用初始化后就不能修改
  • 引用作为函数参数可以替代指针变量

引用的本质

引用的本质在c++内部实现是一个指针常量:

Type& ref = val; // Type* const ref = &val;

c++ 编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同,只是这个过程是编译器内部实现,用户不可见;

引用与指针的区别

  1. 引用必须被初始化(初始值必须是一个对象),指针不必(但最好要初始化);
  2. 引用初始化以后不能被改变,指针可以改变所指的对象;
  3. 不存在指向空值的引用,但是存在指向空值的指针;
  4. 指针是一个对象,可以定义指向指针的指针。但不能定义指向引用的指针,也不能定义指向引用的引用;

和 C# 中的引用类型的思考

C# 中的引用类型和C++ 的引用区别比较大,不如说C# 引用类型的行为更接近指针,可以改变其指向的对象实例,类似C++ 指针指向一个对象,但有一些明显区别:

  1. 不能直接操作地址:C#不允许直接操作内存地址或进行指针算术,这与C++的指针不同。在C#中,只能使用引用类型变量来访问对象,而不能像指针那样进行复杂的内存操作;
  2. 自动垃圾回收:C#有自动垃圾回收机制,会在对象不再被引用时释放内存,而C++需要程序员手动管理内存(使用 delete 释放通过 new 分配的内存);
  3. 类型安全:C#的引用类型是类型安全的,编译器会在编译期间进行类型检查,而C++指针可以指向任何类型的内存,容易导致类型错误;
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇