【问题标题】:How to define an alias to a pointer to an integer?如何定义指向整数的指针的别名?
【发布时间】:2015-04-18 15:41:02
【问题描述】:

我正在尝试运行以下代码,但出现以下错误。

错误:无法声明指向“int&”的指针

#include <iostream>
using namespace std;

int main()
{
    int x = 5;
    int *ptr = &x;

    int &(*y) = ptr;
    *y = 5;

    cout << *ptr << endl;
    return 0;
}

【问题讨论】:

  • 也许你的意思是int *&amp;y = ptr;,但在这种情况下它与int *y = ptr; 没有区别。

标签: c++ codeblocks gnu


【解决方案1】:

声明指针引用的方式与声明基本类型引用的方式相同。

考虑:

int main()
{
    int i = 0; // int

    int& ir = i; // int reference (reference to int)

    int* ip = &i; // int pointer (pointer to int)

    int*& ipr = ip; // int pointer reference (reference to pointer to int)

    *ip = 5;

    cout << *ipr << endl;
    return 0;
}

【讨论】:

    【解决方案2】:

    如果您只想要一个指向同一内存区域的新指针,请使用:

    int *y = ptr;
    

    这不是一个“别名”,因为如果您更改 *ptr 或 *y,两者都会更改,但如果您自己更改指针,则不会更新另一个。

    如果您确实想要引用指针,请使用:

    int *&y = ptr;
    

    【讨论】:

    • 我们是否应该使用括号( int *(&y) = ptr; )?如果我们不使用方括号,* 会抵消 & 吗?
    • @Moiz Sajid 这是变量声明(从右到左读取 - 引用指向 int 的指针),而不是取消引用变量的地址。
    【解决方案3】:
    int *ptr = &x;
    

    指针值有一个地址和一个x类型。

    当你输入上面的代码时,ptr 的值是 x 的地址,而 ptr 知道 x 的类型。

    int * (&y) = ptr;
    

    上面的代码声明了变量'y'(类型:int*,定义:ptr的引用)

    引用变量应该同时声明和定义。

    无论如何,因此 ptr 和 y 指向相同的内存地址。

    你可以很容易地认为 y 是 ptr 的昵称。

    因此您可以使用 y 而不是 ptr 来访问变量“x”。

    【讨论】:

      【解决方案4】:

      v - 变量名。

      &amp;v - 一个变量,将作为某事物的引用。

      *&amp;v - 一个变量,将作为指向某物的指针的引用

      int *&amp;v - 一个变量,它将作为指向 int 的指针的引用

      或者更有趣的例子,

      (*&amp;v)[5] - 一个变量,它将作为指向 5 个数组的指针的引用

      int (*&amp;v)[5] - 一个变量,它将作为指向 5 个数组的指针的引用 int

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-23
        • 2019-10-27
        • 2023-03-18
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 2021-06-13
        • 1970-01-01
        相关资源
        最近更新 更多