3

考虑:

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
};

由于创建了 pvar 的副本,仍然会输出 2 吗?

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

我无法详细说明更合适的问题标题,因为老实说我不知道​​第三个示例是什么。

4

2 回答 2

4

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

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

于 2012-10-05T07:54:19.803 回答
2

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

于 2012-10-05T07:47:37.110 回答