考虑:
1
int one=1;
void func(int* ptr)
{
ptr=&one;
}
int main() {
int nvar=2;
int* pvar=&nvar;
func(pvar);
std::cout<<*pvar<<std::endl;
return0
};
还会输出2因为pvar的副本是否正确创建了?
2
void func(int*& ptr)
{
ptr=&one;
}
输出将为1,因为指针的引用已通过,所有正常
3
int one=1;
void func(int** ptr)
{
*ptr=&one;
//or **ptr=one;
}
int main()
{
int nvar=2;
int* pvar=&nvar;
func(&pvar);
std::cout<<*pvar<<std::endl;
输出1
我无法详细说明一个更合适的问题标题,因为我老实说不知道 第三个例子。
答案 0 :(得分:4)
第三个例子与第二个例子非常相似,因为你仍然将指针传递给你的pvar指针。指向指针的指针意味着您可以更改指针指向的任何内容。
指针指针(* )和指针引用(&amp;)之间的主要区别在于,无论何时传递指针引用,都必须初始化指针(非空,具有定义明确的价值)。
答案 1 :(得分:2)
第三个示例创建一个指向局部变量nvar
的指针,该变量包含2
,指向此func
指针的passess指针,其中指针覆盖全局one
。 1}},包含一个。然后它打印pvar
指向的值,one
,即1
。 (在// or **ptr=one
的情况下,它将one
值放入指针所指向的变量,即nvar
,仍然以相同的输出结束。)