例如,我有以下代码:
int a = 1;
int b = 2;
int *c = &a;
int &d = *c;
c = &b;
d++;
第4行的行为是什么?如果我想要一个指针的引用,使用
是否正确int *&e = c;
有没有理由选择对指针的引用?
答案 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)
关于第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;
对指针的引用对于可能改变其值(=指向的地址)的函数的参数很有用,例如
void allocate(int*&p)
{ p=new int[10]; }