[英]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.