0

我有一个旧的 c 程序示例,它使用 fftw 来求解微分方程。

编译时出错的程序的两行是:

creal(comp[i2+n_y*i1]) = c_zero + 1/15;
cimag(comp[i2+n_y*i1]) = 0.0;

这里,comp 是一个复变量,creal,cimag 是它的实部和虚部。它试图在某个点(i2,i1)分配值。

这给出了错误

 **error: lvalue required as left operand of assignment**

我之前也遇到过这个问题,解决方法是替换creal__creal__或其他东西,尽管我不记得了。谁能告诉我如何摆脱错误?任何帮助将不胜感激。

4

4 回答 4

1

为了给一个复数赋值,我做了以下工作

__real__(comp[i1+n*i2]) = ...
__imag__(comp[i1+n*i2]) = ....
于 2012-08-16T12:36:41.890 回答
0

creal是一个函数,它返回一个值,你不能给一个值赋值。

例如,假设对它creal进行评估0.0就像您尝试这样做:

0.0 = c_zero + 1/15;

creal是一个 C 标准函数:

#include <complex.h>
double creal(double complex z);
于 2012-08-13T18:35:05.467 回答
0

如果你是对的,这可以实现:

int * pointer_generator()
{
  return (int *)malloc(8);
 }

int main()
{
  *( pointer_generator() )=123234;
  return 0;
  }

这行得通。VC++ 2010。但它指向哪里?谁知道?

于 2012-08-13T18:37:48.450 回答
0

因为你的新复杂值的虚部应该是0你可以做的

comp[i2+n_y*i1]= c_zero + 1/15;

复杂对象是 C 中的一等公民,可以直接分配给。

如果您想添加另一个虚构部分

comp[i2+n_y*i1]= c_zero + 1/15 + 78 * I;

你必须包括complex.h才能I工作。

编辑:假设这c_zero只是一个0复杂的类型,可能正确的写作就是

comp[i2+n_y*i1]= 1.0/15 + 78 * I;
于 2012-08-13T18:46:21.730 回答