#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
我不知道在这种情况下多个间接是如何工作的。
答案 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
的值。