欸,废话不多说,直接上代码,理解了代码之后再去看输出和结论就比较简单,或者也可以直接看最下面的结论:
#include <iostream>
using namespace std;
struct A
{
int data;
A(int n):data(n){}
};
void a(A*x)
{
x=new A(999);
}
void a(A**x)
{
*x=new A(999);
}
int main()
{
A *h=new A(10);//定义指针变量并赋值
a(h);//传入h
cout<<"h.data="<<h->data<<endl;
a(&h);//传入h的地址
cout<<"h.data="<<h->data<<endl;
}
结果如下:
相对于指针来说,
传入a(A *x)中的实参h与形参x的关系只是简单的x=h,如同int a,b;a=b;这样,当b改变之后,a并不会改变,易知这就是值传递了。
而传入a(A**x)中的实参为&h与形参**x的关系为*x=h,这就表示x指向的是h,如int *a,b;a=&b;当b改变时,*a的值也会改变,而*x的改变也会导致h的改变,这就是二级指针的简单理解了。