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

时间:2015-10-29 00:17:05

标签: c++ pointers reference

例如,我有以下代码:

int a = 1;
int b = 2;
int *c = &a;
int &d = *c;
c = &b;
d++;

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

是否正确
int *&e = c;

有没有理由选择对指针的引用?

2 个答案:

答案 0 :(得分:4)

此声明

int &d = *c;

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

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

int *c = &a;

所以引用d引用对象a。引用可能不会被重新分配。它们应在声明时初始化。

因此声明中的表达式

d++;

增加对象a。

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

此声明

int *&e = c;

有效。

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

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

使用指针函数看起来像

void swap( int *a, int *b )
{
   int tmp = *a;
   *a = *b;
   *b = tmp;
} 

它可以被称为

int a = 5;
int b = 10;

swap( &a, &b );

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

void swap( int &a, int &b )
{
   int tmp = a;
   a = b;
   b = tmp;
} 

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

int a = 5;
int b = 10;

swap( a, b );

答案 1 :(得分:0)

  1. 关于第4行的含义

    int a = 1;
    int*c = &a;    // okay:  pointer to int, points to a
    int&d = *c;    // okay;  reference to int, refers to *c=a;
    
  2. 对指针的引用对于可能改变其值(=指向的地址)的函数的参数很有用,例如

    void allocate(int*&p)
    { p=new int[10]; }