How to pass a pointer variable as a reference parameter?
关于这个问题我还有一个问题。
问题中的回答者使用int*&
作为参数数据类型,但我不理解指针和引用数据类型的顺序。
在我看来,int&*
对我来说看起来更实用,所以我试着用它进行编译,但是不允许这样做。
我想清楚地了解这个逻辑。
我认为int*& a
喜欢int*(int& a)
,所以它就像一个参考指针,但显然,它正好相反。
为什么我不能使用int&*
作为指针引用的含义?
C ++类型以名称为中心。 int*&foo
是你应该怎么想的。
首先,我们有&foo
- foo
是一个参考。什么参考? *&foo
- 一个指针。指针是什么? int*&foo
一个整数。
最初的C类规则甚至旨在“演示如何使用它们”。所以int *foo
是int = *foo
作为有效表达的简称,或者*foo
是int
。 &
并不是那么有效。
有三个简单的步骤:
- 从未知元素开始,以螺旋/顺时针方向移动;当ecountering以下元素用相应的英语语句替换它们:[X]或[] =>数组X大小...或数组未定义大小...(type1,type2)=>函数传递type1和type2返回。 .. * =>指针......
- 继续以螺旋/顺时针方向执行此操作,直到所有令牌都被覆盖。
- 始终先解决括号中的任何内容!
+---------+
| +-----+ |
| | +-+ | |
| | ^ | | |
int * & t ; | |
^ ^ ^ | | |
| | +---+ | |
| +-------+ |
+------------+
来自t
,所以:
是......
然后我们看到qazxsw poi,这继续下去,看看qazxsw poi,所以
t是对...的引用
然后我们看到;
t是指向...的指针
然后我们看到&
:
t是对指向*
的指针的引用
这很有道理。现在让我们试试另一个:
int
来自int
,所以:
是......
然后我们看到qazxsw poi,这继续下去,看看qazxsw poi,所以
t是指向...的指针
然后我们看到 +---------+
| +-----+ |
| | +-+ | |
| | ^ | | |
int & * t ; | |
^ ^ ^ | | |
| | +---+ | |
| +-------+ |
+------------+
t是指向...的引用的指针
在这里,我们立即遇到了问题。您不能拥有指向引用的指针。引用没有地址。
因为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()
是两回事。第一个是有意义的,如果你分解,第二个没有。