繁体   English   中英

第三个例子发生了什么?

[英]What is happening on this third example?

考虑:

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

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

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

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

第三示例创建一个指针到本地变量nvar ,含有2 ,passess指针这个指针func ,在那里它被指针重写到全球one ,包含一个。 然后它打印pvar指向的pvar ,即one ,即1 (在// or **ptr=one情况下,它将one值放入指针所指向的变量中,这是nvar ,仍然以相同的输出结束)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM