这个多重间接是如何工作的?

时间:2016-07-26 09:11:06

标签: c++ pointers

#include<iostream>
#include<conio.h>
using namespace std; 
int main()
{
    int i=10, j=20, k=30;
    int *ip1, *ip2, **ipp;
    ip1=&i;
    ip2=&j;
    ipp=&ip1;
    *ipp=ip2;
    *ipp=&k;
    cout<<*ip1<<endl;
    cout<<*ip2<<endl;
    cout<<**ipp;
    getch();
}

cout<<*ip1;打印30到控制台,任何人都可以解释如何?输出是 -

30
20
30

我在期待 -

10
20
30

我不知道在这种情况下多个间接是如何工作的。

2 个答案:

答案 0 :(得分:2)

  

行cout&lt;&lt; * ip1;打印30到控制台,任何人都可以解释如何?

因为您通过ip1(指针指针)更改了ipp的值,从指向i,指向j,然后指向{{ 1}}最后。

k

答案 1 :(得分:0)

由于此声明

,变量ipp指向变量ip1
ipp=&ip1;

因此,指针ipp的任何解除引用都会产生指针ip1的值。例如,这句话

*ipp=ip2;

相当于

ip1 = ip2;

和本声明

*ipp=&k;

相当于

ip1 = &k;

结果ip1包含变量k的地址,而ipp包含ip1本身的地址。

这些陈述

cout<<*ip1<<endl;
//...
cout<<**ipp;
除了运算符调用提供的换行符之外,

产生相同的结果&lt;&lt;在第一个语句中使用endl。它们输出变量k的值。