gpt4 book ai didi

c++ - for循环中的指针运算

转载 作者:行者123 更新时间:2023-11-30 02:02:30 26 4
gpt4 key购买 nike

我试图理解一些以我不习惯的方式使用指针运算的代码。在代码中的某个时刻,我遇到了这个:

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]);

我一直在寻找对这里发生的事情的解释,但找不到。此外,有问题的代码显然最终给出了正确的结果(它是蒙特卡罗的一部分)。有什么想法吗?

最佳答案

您发布的代码有误;它确实会调用未定义的行为。

例如。在第二次迭代中,p_row(*P)+n . *P指向一个大小为 n 的数组,因此,当代码显示为 *(p_row+i) , 它读取数组末尾。

最后一行似乎假设矩阵存储在一个连续的数组中(例如行专业)。但是,这意味着 P将是 complex<double>*P = new complex<double>[n*n]; 初始化.

关于c++ - for循环中的指针运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13090705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com