指针引用类型的序列

问题描述 投票:2回答:3

How to pass a pointer variable as a reference parameter?

关于这个问题我还有一个问题。

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

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

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

我认为int*& a喜欢int*(int& a),所以它就像一个参考指针,但显然,它正好相反。

为什么我不能使用int&*作为指针引用的含义?

c++ pointers pass-by-reference
3个回答
2
投票

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

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

最初的C类规则甚至旨在“演示如何使用它们”。所以int *fooint = *foo作为有效表达的简称,或者*fooint&并不是那么有效。


2
投票

Clockwise/Spiral Rule

有三个简单的步骤:

  1. 从未知元素开始,以螺旋/顺时针方向移动;当ecountering以下元素用相应的英语语句替换它们:[X]或[] =>数组X大小...或数组未定义大小...(type1,type2)=>函数传递type1和type2返回。 .. * =>指针......
  2. 继续以螺旋/顺时针方向执行此操作,直到所有令牌都被覆盖。
  3. 始终先解决括号中的任何内容!
               +---------+  
               | +-----+ |
               | | +-+ | |
               | | ^ | | |
           int * & t ; | |
            ^  ^ ^   | | |
            |  | +---+ | |
            |  +-------+ |
            +------------+

来自t,所以:

是......

然后我们看到qazxsw poi,这继续下去,看看qazxsw poi,所以

t是对...的引用

然后我们看到;

t是指向...的指针

然后我们看到&

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

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

int

来自int,所以:

是......

然后我们看到qazxsw poi,这继续下去,看看qazxsw poi,所以

t是指向...的指针

然后我们看到 +---------+ | +-----+ | | | +-+ | | | | ^ | | | int & * t ; | | ^ ^ ^ | | | | | +---+ | | | +-------+ | +------------+

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

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


1
投票

因为t确实没有意义,考虑符号的含义。

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

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

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

我会停下来说希望你知道x &。如果没有,请参阅链接。

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

  • x:对指向int的指针的引用。

我们可以像这样使用int *:在来电者中:

int &

在myFunction(int *&myInt)中:

the difference between passing by reference and by pointer

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

注意:将myInt设置为局部变量的地址不是一个好主意,因为分钟int *&结束,存储在那里的数据将被销毁。这仅用于举例目的

最后,还有一个问题在于:int *&

  • int * myInt= 0; myfunction(myInt); :指向int的引用的指针

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

所以,简而言之:int i; myInt = &i; myFunction()是两回事。第一个是有意义的,如果你分解,第二个没有。

© www.soinside.com 2019 - 2024. All rights reserved.