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

c++中*和&的区别

作者:野牛程序员:2023-07-23 10:08:27 C++阅读 2799

在C++中,*&是两个重要的符号,分别表示指针和引用,它们有不同的用途和语义。

  1. * 符号(指针):

    • 声明指针变量:在变量类型前面加上*,如int* ptr;,这将声明一个名为ptr的指向int类型的指针变量。

    • 取指针所指向的值:使用*来访问指针所指向的内存地址处的值,例如,int x = *ptr;将会把指针ptr所指向的值赋给变量x

    • 动态内存分配:使用new运算符可以动态地在堆上分配内存,并返回指向该内存的指针。例如,int* ptr = new int;会在堆上分配一个整数大小的内存块,并将指针ptr指向该内存块。

  2. & 符号(引用):

    • 声明引用变量:在变量名前面加上&,如int x = 10; int& ref = x;,这将声明一个名为ref的整数引用,并将其绑定到变量x

    • 别名:引用提供了一个变量的别名,通过引用修改的值会直接反映在原始变量上。例如,ref = 20;会将x的值修改为20。

    • 函数传参:引用常用于函数参数传递,可以通过引用在函数内部修改原始变量的值,而不是传递副本。这样可以避免额外的内存开销和数据复制。

比较指针和引用的不同点:

  • 指针可以为空(nullptr),而引用必须始终绑定到一个有效的对象。

  • 指针可以在声明后重新赋值指向其他对象,而引用在声明后不可变更为绑定其他对象。

  • 指针需要使用解引用操作符*来访问所指向的值,而引用可以直接使用变量名来访问值。

  • 指针可以进行算术运算(如指针加减),而引用不支持算术运算。

综上所述,*用于指针的声明和解引用,而&用于引用的声明。它们都是C++中非常有用且常见的概念,在合适的场景中使用它们可以提高代码的效率和可读性。

以下是用C++展示指针和引用的代码示例:

1. 指针示例:

#include <iostream>

int main() {
    int x = 10;
    int* ptr = &x; // 声明一个指针并将其初始化为变量 'x' 的地址

    std::cout << "x 的值: " << x << std::endl;
    std::cout << "x 的地址: " << &x << std::endl;
    std::cout << "ptr 指向的值: " << *ptr << std::endl; // 解引用指针以访问所指向的值

    // 动态内存分配
    int* dynamicPtr = new int; // 在堆上为一个整数分配内存
    *dynamicPtr = 25; // 在 dynamicPtr 指向的内存位置存储一个值

    std::cout << "dynamicPtr 指向的值: " << *dynamicPtr << std::endl;

    delete dynamicPtr; // 使用 delete 释放内存,以防止内存泄漏
    return 0;
}

2. 引用示例:

#include <iostream>

void modifyValue(int& ref) {
    ref = 50; // 通过引用修改值
}

int main() {
    int x = 10;
    int& ref = x; // 声明一个引用并将其绑定到 'x'

    std::cout << "x 的值: " << x << std::endl;
    std::cout << "ref 的值: " << ref << std::endl;

    ref = 20; // 通过引用修改 'x'

    std::cout << "通过引用修改后的 x 的值: " << x << std::endl;

    modifyValue(x); // 将 'x' 通过引用传递给函数

    std::cout << "函数调用后的 x 的值: " << x << std::endl;

    return 0;
}

在第一个示例中,演示了如何声明指针,将其赋值为变量的地址,然后使用指针访问该值。还展示了使用 new 运算符进行动态内存分配,并使用 delete 运算符释放内存,以防止内存泄漏。

在第二个示例中,声明了一个引用并将其绑定到一个变量。然后,直接修改变量以及通过引用修改变量的值。此外,将一个变量通过引用传递给一个函数,这允许函数修改原始变量的值。



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

最新推荐

热门点击