📜  C++中的指针与引用(1)

📅  最后修改于: 2023-12-03 15:29:54.472000             🧑  作者: Mango

C++中的指针与引用

在C++中,指针和引用是两个非常重要的概念,它们可以用来访问和操作变量及其数据。本文将会介绍指针和引用的基本概念,以及它们的用法和区别。

指针

指针是一个存储其他变量地址的变量。通过指针,我们可以间接地访问和操作另一个变量及其数据。指针使用前必须初始化,否则会导致无法预知的错误。指针可以通过*&符号进行操作。其中*用于将指针解引用,访问指针指向的变量的值;而&用于获取变量的地址。

指针的定义和初始化

指针变量的定义和初始化如下所示:

int *p;  // 定义一个指向int类型变量的指针
int a = 2;
p = &a;   // 将指针p指向变量a的地址
指针的解引用

通过指针解引用来访问指针指向的变量的值,示例代码如下:

int value = *p;  // 解引用指针p,获取指针指向的变量a的值
指针的比较

指针可以进行比较操作,对应的运算符有<><=>===!=。比较操作比较的是指针所指向的地址,示例代码如下:

int *p1, *p2;
p1 = new int;
p2 = p1;
if (p1 == p2) {
    // 指针p1和p2指向同一个地址
}
指针的数组和指针的运算

指针也可以作为数组来使用,数组名本身就是一个指向数组首元素的指针。同时,可以通过指针进行加减运算。指针加上一个整数值,会指向偏移量为该整数值的位置;指针减去一个整数值,会向指向数组首元素的指针方向移动相应的元素位置。示例代码如下:

int array[5] = {1, 2, 3, 4, 5};
int *p = array; // 数组名就是指向数组首元素的指针
p += 2; // p指向了数组的第三个元素
int second = *(p + 1); // 获取指针p指向元素的下一个元素的值,即数组的第四个元素
引用

引用是一个已存在变量的别名。它使用&符号定义,相当于变量的一个别名。引用可以被用于赋值和函数参数传递等地方,使得代码更加简洁、易读。引用在定义时必须初始化,后续不可更改其所绑定的变量。

引用的定义和初始化

引用的定义和初始化如下所示:

int a = 1;
int &r = a; // 定义一个指向变量a的引用r
引用作为函数参数

引用可以作为函数参数传递,这样函数内部对引用的操作会直接影响到实参本身。示例代码如下:

void increase(int &r) {
    r++; // 对r所绑定的变量进行加1操作
}

int a = 1;
increase(a); // a的值变为2
引用作为返回值

引用也可以作为函数的返回值,通过此方式可以实现对函数调用结果进行赋值。示例代码如下:

int &increase(int &r) {
    r++; // 对r所绑定的变量进行加1操作
    return r;
}

int a = 1;
increase(a) = 3; // a的值变为3
指针与引用的区别

指针和引用有以下区别:

  • 指针可以在初始化后被赋值改变所指向的变量,而引用一旦绑定后则不能再修改其所绑定的变量。
  • 指针可以被赋值为NULL,表示不指向任何对象,引用则不能有这种情况。
  • 指针可以进行一些复杂的操作,如指针算术、数组操作和动态内存分配等,而引用则只是一个变量的别名,不能进行这些操作。