天天看点

如何理解指向指针的指针?

本文由

伯乐在线 -

菜鸟浮出水 翻译自

StackOverflow。欢迎加入

技术翻译小组。转载请参见文章末尾处的要求。

问题:如何理解指向指针的指针?

我在一篇教程中看到下面这段,它描述指向指针的指针是如何运作的。

引用文章相关段落如下:

1

2

int

i = 5, j = 6, k = 7;

int

*ip1 = &i, *ip2 = &j;

现在我们可以这么写:

int

**ipp = &ip1;

那么现在指针 ipp 指向了 ip1,ip1 指向了 i。*ipp 就是 ip1,**ipp 就是 i,或者说是 5。我们可以用我们熟悉的盒子箭头图来描述,像这样:

如何理解指向指针的指针?

如果我们接着这么写:

*ipp = ip2;

我们就改变了 ipp 指向的那个指针(也就是 ip1),现在它指向 ip2 所指的地方。也就是说(ip1)现在它指向了 j:

如何理解指向指针的指针?

我的疑问是:为什么在第二幅图里,ipp 还是指向 ip1 而不是 ip2?

最佳答案:

让我们暂时忘掉那些关于指针的各种类比。指针实际上存放的是内存的地址。

& 符号的意思是取地址,也就是返回一个对象在内存中的地址。