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)
有什么理由选择对指针的引用吗?
本声明
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)