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

#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

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

最佳答案 由于此语句,变量ipp指向变量ip1

ipp=&ip1;

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

*ipp=ip2;

相当于

ip1 = ip2;

这句话

*ipp=&k;

相当于

ip1 = &k;

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

而这些陈述

cout<<*ip1<<endl;
//...
cout<<**ipp;

除了由运算符调用提供的换行符之外,产生相同的结果<

点赞