引用和指针的区别

简介: 引用和指针的区别

引用和指针的区别


1、定义和性质不同

1、指针是一个变量,存储的地址,指向内存单元

2、引用是变量的别名,跟原始变量是同一块内存

int a = 10;
int *p = &a; // p是指针, &在此是取地址运算 
int &r = a; // r是引用, &在此起标识作用

2、指针可以不初始化,引用必须初始化

int* ptr;  //正确
int& ref;  //error:引用变量"ref"需要初始值设定项

3、指针可以有多级,引用只能是一级

int **p; // 合法
int &&a; // 不合法

4、指针可以指向NULL,引用不可以为NULL

int *p = NULL; // 合法
int &r = NULL; // 不合法

5、指针初始化之后可以再改变指向,引用不可以

int a = 996;
int *p = &a; // 初始化, p 是 a 的地址
int &r = a; // 初始化, r 是 a 的引用
int b = 885;
p = &b;    // 合法, p 更改为 b 的地址
r = b;     // 不合法, r 不可以再变

6、sizeof 的运算结果不同

int a = 996;
int *p = &a;
int &r = a;
cout << sizeof(p); // 返回 int* 类型的大小
cout << sizeof(r); // 返回 int 类型的大小

7、自增运算意义不同

int a = 996;
int *p = &a;
int &r = a;
p++;  指向下一块地址
r++; 相当于a++

8、指针和引用作为函数参数时,指针需要检查是否为空,引用不需要

void fun_p(int *p)
{
    // 需要检查P是否为空
    if (p == NULL) 
    {
        // do something
    }
}
void fun_r(int &r)
{
    // 不需要检查r
    // do something
}

目录
相关文章
|
2月前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
6月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
81 1
|
2月前
|
存储 C语言
C语言指针与指针变量的区别指针
指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
|
5月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
34 3
|
5月前
|
存储
头指针和头结点的区别
头指针和头结点的区别
224 1
|
6月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
67 5
|
6月前
|
存储 C语言
一级指针和二级指针的区别
一级指针和二级指针的区别
97 1
|
6月前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
51 2
|
6月前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```