C++ c+中的奇怪类型+;
我对原型有一个方法:C++ c+中的奇怪类型+;,c++,types,reference,parameters,C++,Types,Reference,Parameters,我对原型有一个方法: bool getAssignment(const Query& query, Assignment *&result); 我对第二个参数(Assignment*&result)的类型感到有点困惑,因为我以前从未见过类似的情况。它的用法如下: Assignment *a; if (!getAssignment(query, a)) return false; 它是对指针的引用还是相反?或者两者都没有?如有任何解释,我们将不胜感激。谢谢。这是对
bool getAssignment(const Query& query, Assignment *&result);
我对第二个参数(Assignment*&result
)的类型感到有点困惑,因为我以前从未见过类似的情况。它的用法如下:
Assignment *a;
if (!getAssignment(query, a))
return false;
它是对指针的引用还是相反?或者两者都没有?如有任何解释,我们将不胜感激。谢谢。这是对指针的引用。其目的是能够更改指针。和其他类型的一样
详细说明和示例:
void f( char* p )
{
p = new char[ 100 ];
}
int main()
{
char* p_main = NULL;
f( p_main );
return 0;
}
不会更改p_main
以指向已分配的字符数组(这是一个明确的内存泄漏)。这是因为您复制了指针,它是按值传递的(就像按值传递一个int
;例如void f(int x)
!=void f(int&x)
)
因此,如果您更改f
:
void f( char*& p )
现在,这将通过引用传递p_main
,并将更改它。因此,这不是内存泄漏,在执行f
之后,p_main
将正确指向分配的内存
另外,也可以通过使用双指针(例如,
C
没有引用)来实现这一点:
对于类似的内容,您基本上是从右到左(或从内到外)阅读声明 换句话说,您希望从要声明的项的名称开始,然后向外进行。在本例中,直接从名称到类型,我们得到:
再加上一句,如果你想得到更详细的解释,这很好。@chris:我不太喜欢那种解释。他称之为顺时针螺旋法则,但“顺时针”与任何事情都无关。如果你决定逆时针走,它的工作原理也会完全相同。它充其量只是强调一些完全不相关的东西。没错,顺时针没有什么特别的意义,但你必须选择一些东西来记住它。我也听说过向左走。当我发现它的时候,我读过之后,从来没有遇到过理解任何东西的问题,所以它对我产生了很大的魔力,不管你选择哪种方式来记住它。无论如何都比按部分记忆好得多。顺时针方向,因为时钟从12点开始。只是为了提醒你,你拿第一个右手元素。吉米:第一个右边和元素在三点,在12到6的一半之间(嗯…现在有一个有趣的问题:“3点在12点到6点之间是什么时候?”),在……之前没有看到过这样的东西……C++,没有人真的这么做过。通常,它是作为C风格的双指针完成的。好吧,引用并不像其他类型。参考文献不是C++对象模型中的“对象”,指针和<代码> int >代码> s,其他类型都是,它们不能在初始化之后访问,因为没有语法来区分访问引用和访问引用对象,它们不遵循“声明MIMICS使用”语法,推导引用类型等有特殊规则。引用是特殊的。
void f( char** p )
{
*p = new char[ 100 ];
}
int main()
{
char* p_main = NULL;
f( &p_main );
return 0;
}