首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++中引用与指针的区别

C++中引用与指针的区别

原创
作者头像
代码小李
发布2024-12-30 09:29:33
发布2024-12-30 09:29:33
4880
举报

在C++中,引用和指针是两种不同的机制,用于访问和操作对象。它们有以下主要区别:

  1. 定义和初始化
    • 引用:引用必须在定义时初始化,并且一旦初始化后就不能改变引用的对象。
    • 指针:指针可以在定义时初始化,也可以不初始化。指针可以随时改变指向的对象。
代码语言:txt
复制
int x = 10;
int& ref = x; // 引用必须在定义时初始化
int* ptr = &x; // 指针可以在定义时初始化

语法和使用

  • 引用:引用的使用方式与普通变量相同,不需要解引用操作。
  • 指针:指针需要通过解引用操作符 * 来访问指向的对象。
代码语言:txt
复制
int y = 20;
ref = y; // 直接赋值,改变引用的对象
*ptr = y; // 解引用后赋值,改变指针指向的对象

空值

  • 引用:引用不能为 nullptr,必须始终引用一个有效的对象。
  • 指针:指针可以为 nullptr,表示不指向任何对象。
代码语言:txt
复制
int* ptr = nullptr; // 指针可以为 nullptr
// int& ref = nullptr; // 错误,引用不能为 nullptr

重新绑定

  • 引用:引用一旦绑定到某个对象后,不能重新绑定到另一个对象。
  • 指针:指针可以重新指向不同的对象。
代码语言:txt
复制
int z = 30;
ref = z; // 改变引用的对象,实际上是改变 x 的值
ptr = &z; // 指针重新指向另一个对象
  1. 内存占用
    • 引用:引用通常不占用额外的内存,它只是一个别名。
    • 指针:指针占用一定的内存空间,通常是一个机器字长(例如32位或64位)。
  2. 传递参数
    • 引用:引用作为函数参数时,可以避免拷贝对象,提高效率。
    • 指针:指针作为函数参数时,同样可以避免拷贝对象,但需要显式解引用。
代码语言:txt
复制
void modify(int& ref) {
    ref = 40;
}

void modify(int* ptr) {
    *ptr = 40;
}

int main() {
    int a = 10;
    modify(a); // 通过引用传递
    modify(&a); // 通过指针传递
    return 0;
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档