当前位置:首页 C++ > 正文

c++引用与指针有什么区别?

作者:野牛程序员:2023-07-15 11:41:19 C++阅读 2714

在C++中,引用和指针都可以用于间接访问变量,但它们有几个关键的区别。

  1. 语法:引用使用&符号声明,并在声明时必须进行初始化。例如:int& ref = variable;。指针使用*符号声明,并且可以在之后进行初始化或重新分配。例如:int* ptr = &variable;

  2. 空值(Null):指针可以具有空值,即指向空地址或未初始化的指针。引用必须在声明时初始化,并且不能具有空值。

  3. 重新赋值:一旦引用被初始化,就不能再引用其他变量。它始终引用相同的对象。指针可以通过重新赋值来指向不同的变量或空地址。

  4. 取址操作:指针可以通过使用取址操作符(&)获取变量的地址,然后将其分配给指针。引用无需使用取址操作符,因为它们在初始化时已经指向了相应的变量。

  5. 空间占用:引用不占用额外的内存空间,而指针需要存储变量的地址。

  6. 空间语义:引用是对变量的别名,对引用的修改将反映在原始变量上。指针是一个独立的实体,对指针的修改不会影响原始变量。

  7. 空引用:引用不能引用空值,但在某些情况下,指针可以是空指针。

总的来说,引用提供了一种更安全、更直观的访问变量的方式,而指针则提供了更多的灵活性和控制权。选择使用引用还是指针取决于具体的需求和设计。

当涉及到函数参数传递时,引用和指针的区别是很明显的。

#include <iostream>

void changeByReference(int& ref) {
    ref = 10;
}

void changeByPointer(int* ptr) {
    *ptr = 20;
}

int main() {
    int value = 0;

    changeByReference(value);
    std::cout << "Value after changeByReference: " << value << std::endl; // 输出:Value after changeByReference: 10

    changeByPointer(&value);
    std::cout << "Value after changeByPointer: " << value << std::endl; // 输出:Value after changeByPointer: 20

    return 0;
}

在上面的例子中,changeByReference函数接受一个整数引用作为参数,并将参数的值更改为10。由于引用是对变量的别名,所以在函数内部对引用的修改实际上会修改原始变量value的值。因此,输出为10。

changeByPointer函数接受一个整数指针作为参数,并通过解引用指针来修改指针指向的变量的值为20。在函数调用时,我们传递了&value,即value的地址,作为指针的参数。因此,函数内部对指针的修改实际上会修改value的值。因此,输出为20。

这个例子展示了通过引用和指针修改变量的不同方式。引用提供了一种更直接的方式来访问和修改变量,而指针则需要解引用操作符来访问和修改所指向的变量。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击