Cem*_*mre 8 c++ parameters types reference
我有一个原型的方法:
bool getAssignment(const Query& query, Assignment *&result);
Run Code Online (Sandbox Code Playgroud)
我对第二个参数(Assignment *&result
)的类型有点困惑,因为我认为我之前没有看过类似的东西.它用作:
Assignment *a;
if (!getAssignment(query, a))
return false;
Run Code Online (Sandbox Code Playgroud)
它是对指针的引用还是反过来?还是两个?任何解释都表示赞赏.谢谢.
Kir*_*rov 18
它是指针的引用.我们的想法是能够改变指针.它就像任何其他类型.
详细说明和示例:
void f( char* p )
{
p = new char[ 100 ];
}
int main()
{
char* p_main = NULL;
f( p_main );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将不会更改p_main
为指向已分配的char数组(这是一个明确的内存泄漏).这是因为你复制指针,它是通过值传递的(就像传递一个int
by值一样;例如void f( int x )
!= void f( int& x )
).
所以,如果你改变f
:
void f( char*& p )
Run Code Online (Sandbox Code Playgroud)
现在,这将通过p_main
引用传递并将更改它.因此,这不是内存泄漏,执行后f
,p_main
将正确指向已分配的内存.
PS同样可以通过使用双指针(例如,C
没有引用)来完成:
void f( char** p )
{
*p = new char[ 100 ];
}
int main()
{
char* p_main = NULL;
f( &p_main );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Jer*_*fin 12
对于这样的事情,你基本上从右到左(或从里到外)阅读声明.
换句话说,您希望从声明的项目的名称开始,然后向外进展.在这种情况下,直接从名称进展到类型,我们得到:
归档时间: |
|
查看次数: |
410 次 |
最近记录: |