繁体   English   中英

错误:二进制*的无效操作数(具有“ double”和“ double *”)

[英]error: invalid operands to binary * (have 'double' and 'double *')

我在此代码中有一个错误:

mat mat_y(mat b, mat l, int n) {
    mat c = c = mat_new(n);
    for(i=0; i<n; i++)
    {
        c[i]=b[i];
        for(j=0; j<i; j++)
        {
            c[i] -= l[i][j] * c[j];
        }
    }
    return c;
}

错误:

无效的二进制操作数*(具有'double'和'double *')

以下是一些信息:

typedef double **mat;
int i,j,k;
void mat_zero(mat x, int n) {
    for (i = 0; i < n; i++) 
        for (j = 0; j < n; j++)
            x[i][j] = 0;
}


mat mat_new(int n) {
    mat x = malloc(sizeof(double*) * n);
    x[0] = malloc(sizeof(double) * n * n);

    for (i = 0; i < n; i++)
        x[i] = x[0] + n * i;
    mat_zero(x, n);

    return x;
}

二进制运算符*不能将指针和双精度数相乘。 它从您的代码中出现,尽管您实际上并不是在尝试乘以一个指针,但是错误地访问了一个双指针。

c[i] -= l[i][j] * c[j];

因此,对于像double**这样的指针,它表示指向指针的指针 如果只访问一次,如c[i] ,它将取消引用外部指针,这将导致指向double的指针。 您需要两次取消引用double**才能访问其中的浮点数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM