【问题标题】:Sequence of a pointer reference type指针引用类型的序列
【发布时间】:2019-03-23 20:04:39
【问题描述】:

How to pass a pointer variable as a reference parameter?

我对这个问题还有一个问题。

问题中的回答者是使用int*&作为参数数据类型,但是我不明白指针和引用数据类型的顺序。

在我看来,int&* 对我来说看起来更实用,所以我尝试使用它进行编译,但不允许这样做。

我想清楚地了解这个逻辑。

我认为int*& aint*(int& a) 一样,所以它就像一个引用的指针,但显然,它正好相反。

为什么不能用int&*作为指针引用的意思?

【问题讨论】:

标签: c++ pointers pass-by-reference


【解决方案1】:

C++ 类型以名称为中心。 int*&foo 是你应该怎么想的。

首先,我们有 &foo -- foo 是一个参考。参考什么? *&foo——一个指针。指向什么的指针? int*&foo 一个整数。

最初的 C 类型规则甚至旨在“展示它们的使用方式”。所以int *fooint = *foo 是有效表达式的简写,或者*fooint& 并不是这样工作的。

【讨论】:

  • 哦~谢谢!!我完全明白了!我只是不知道如何正确阅读
  • 错字:“你应该怎么想”应该是“你应该怎么想”。
【解决方案2】:

Clockwise/Spiral Rule

只需三个简单的步骤:

  1. 从未知元素开始,沿螺旋/顺时针方向移动;当遇到以下元素时,将它们替换为 相应的英文语句:[X] 或 [] => Array X size of... 或 Array undefined size of... (type1, type2) => 函数传递 type1 和 type2 返回... * => 指向...的指针
  2. 继续以螺旋/顺时针方向执行此操作,直到覆盖所有标记。
  3. 始终先解决括号中的任何问题!
               +---------+  
               | +-----+ |
               | | +-+ | |
               | | ^ | | |
           int * & t ; | |
            ^  ^ ^   | | |
            |  | +---+ | |
            |  +-------+ |
            +------------+

来自t,所以:

t 是...

然后我们看到;,于是继续看&,所以

t 是对 ...的引用

然后我们看到*

t 是对指向...的指针的引用

然后我们看到int

t 是对指向 int 的指针的引用

这完全有道理。现在让我们试试另一个:

               +---------+  
               | +-----+ |
               | | +-+ | |
               | | ^ | | |
           int & * t ; | |
            ^  ^ ^   | | |
            |  | +---+ | |
            |  +-------+ |
            +------------+

来自t,所以:

t 是...

然后我们看到;,于是继续看*,所以

t 是指向...的指针

然后我们看到&

t 是指向...的引用的指针

在这里,我们立即遇到了问题。您不能拥有指向引用的指针。参考文献没有地址。

【讨论】:

    【解决方案3】:

    因为int&* 没有真正意义,考虑到符号的含义。

    • int:一种数据类型
    • x *:指向数据类型x的指针
    • x &:对数据类型x的引用

    我们可以将它们组合成以下常见的形式:

    • int *: 指向 int 的指针
    • int &:对 int 的引用

    我会停下来说希望你知道the difference between passing by reference and by pointer。如果没有,请查看链接。

    但是,我们可以尝试另一种组合:

    • int *&:对指向 int 的指针的引用。

    我们可以像这样使用int *&: 在调用者中:

    int * myInt= 0;
    myfunction(myInt);
    

    in myFunction(int *& myInt):

    int i;
    myInt = &i; 
    

    调用者中的myInt int 将是i的地址

    注意:将 myInt 设置为局部变量的地址不是一个好主意,因为当分钟 myFunction() 结束时,存储在那里的数据将被破坏。这仅用于示例目的

    最后,问题来了:int&*

    • int &*: 指向 int 引用的指针

    现在,我向您提出这个问题:如果我们有一个对 int 的引用,为什么我们需要一个指针?答:我们没有。没有意义。

    所以,简而言之:int*&int&* 是两个不同的东西。如果你把它分解,第一个是有意义的,第二个没有。

    【讨论】:

      猜你喜欢
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      相关资源
      最近更新 更多