我试图理解一些以我不习惯的方式使用指针算术的代码。在代码中的某一时刻,我遇到了这个:
complex<double> **P, *p_row, result=complex<double>(0,0);
P=new complex<double>*[n];
for(i=0;i<n;i++) P[i]=new complex<double>[n];
for(i=0,p_row=*P;i<n;i++,p_row+=n) result+=log(*(p_row+i));
如果 P 是一个矩阵,这在我看来就像添加 P 的对角线元素的对数。但事实证明,上面的最后一行不等于
for(i=0;i<n;i++) result+=log(P[i][i]);
我一直在寻找关于这里发生了什么的解释,但我找不到。此外,有问题的代码最终显然给出了正确的结果(它是蒙特卡洛的一部分)。有任何想法吗?