关于C++指针数组指向一个构造的方法

关于C++指针数组指向一个结构的方法
下面是我从C++ PRIMER PLUS里看到的一个例子,在看的时候 ,没注意,后来在做练习的时候,不太理解这段代码,就是最后给*pd[3]赋值的时候,为书中的例子中,pd[i] = &mr_E[i].amount 是把对应的地址赋给pd吗?为什么我用 * (pd + i) = &(mr_E[i].amount);赋值方式的时候 ,也可以正常运行程序?还是说,书中的例子是把引用做为右值赋给了pd吗?
struct debts
{
    char name[20];
    double amount;
};//声明一个结构
    struct debts mr_E[3] =
    {
    {"Ima Wolfe", 2400.0},
    {"Ura Foxe",1300.0},
    {"Iby Stout",1800.0}
};//创建一个结构
    double * pd[3];
    for(int i = 0; i < 3; i++)
    {
//        pd[i] = &mr_E[i].amount;//书中的例子
       * (pd + i) = &(mr_E[i].amount);//我的修改
    }


------解决思路----------------------
&在这里不是什么引用,是取地址的意思,&只是用在声明变量时左边,
------解决思路----------------------
1. pd[i] //double *
2. * (pd + i)  //double *
3. pd  //double **

1,2等效