int &a = *b 的行为是什么?

Ais*_*ang -2 c++ pointers reference

例如,我有以下代码:

int a = 1;
int b = 2;
int *c = &a;
int &d = *c;
c = &b;
d++;
Run Code Online (Sandbox Code Playgroud)

第 4 行的行为是什么?如果我想要一个指针的引用,使用它是否正确

int *&e = c;
Run Code Online (Sandbox Code Playgroud)

有什么理由选择对指针的引用吗?

Vla*_*cow 5

本声明

int &d = *c;
Run Code Online (Sandbox Code Playgroud)

声明一个引用,该引用引用指针指向的对象c

执行此声明时,指针c指向对象a

int *c = &a;
Run Code Online (Sandbox Code Playgroud)

所以引用d指的是 object a。参考文献不得重新分配。当它们被声明时,它们将被初始化。

因此语句中的表达式

d++;
Run Code Online (Sandbox Code Playgroud)

增加对象a。

您可以声明对指针的引用。

本声明

int *&e = c;
Run Code Online (Sandbox Code Playgroud)

已验证。

常量引用可以绑定到临时对象。您不能获取临时对象的地址。参考下面使用更简单的表达式。

例如,考虑一个swap交换两个整数的简化函数。

使用指针,函数看起来像

void swap( int *a, int *b )
{
   int tmp = *a;
   *a = *b;
   *b = tmp;
} 
Run Code Online (Sandbox Code Playgroud)

它可以被称为

int a = 5;
int b = 10;

swap( &a, &b );
Run Code Online (Sandbox Code Playgroud)

使用引用,您可以按以下方式编写函数

void swap( int &a, int &b )
{
   int tmp = a;
   a = b;
   b = tmp;
} 
Run Code Online (Sandbox Code Playgroud)

它的调用看起来比使用指针调用函数更简单。

int a = 5;
int b = 10;

swap( a, b );
Run Code Online (Sandbox Code Playgroud)