第三个例子发生了什么?

时间:2012-10-05 07:44:46

标签: c++

考虑:

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

我无法详细说明一个更合适的问题标题,因为我老实说不知道 第三个例子。

2 个答案:

答案 0 :(得分:4)

第三个例子与第二个例子非常相似,因为你仍然将指针传递给你的pvar指针。指向指针的指针意味着您可以更改指针指向的任何内容。

指针指针(* )和指针引用(&amp;)之间的主要区别在于,无论何时传递指针引用,都必须初始化指针(非空,具有定义明确的价值)。

答案 1 :(得分:2)

第三个示例创建一个指向局部变量nvar的指针,该变量包含2,指向此func指针的passess指针,其中指针覆盖全局one。 1}},包含一个。然后它打印pvar指向的值,one,即1。 (在// or **ptr=one的情况下,它将one值放入指针所指向的变量,即nvar,仍然以相同的输出结束。)