Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 传递参数从整数生成指针,但不使用强制转换/预期的‘;双*’;但参数的类型为‘;int’;_C - Fatal编程技术网

C 传递参数从整数生成指针,但不使用强制转换/预期的‘;双*’;但参数的类型为‘;int’;

C 传递参数从整数生成指针,但不使用强制转换/预期的‘;双*’;但参数的类型为‘;int’;,c,C,我是C语言的新手,我的C程序作业中出现了错误。我将生成一个4x4希尔伯特矩阵,然后通过克拉默规则找到它的行列式。但是我在函数“main”中的两个参数的代码中都出现以下错误: In function ‘main’: passing argument 1 of ‘determinant’ makes pointer from integer without a cast [enabled by default] printf("\nThe determinant using Cramer’s R

我是C语言的新手,我的C程序作业中出现了错误。我将生成一个4x4希尔伯特矩阵,然后通过克拉默规则找到它的行列式。但是我在函数“main”中的两个参数的代码中都出现以下错误:

In function ‘main’:
passing argument 1 of ‘determinant’ makes pointer from integer without a cast [enabled by default]
  printf("\nThe determinant using Cramer’s Rule is:\%lf\n", determinant(n,H));
  ^
note: expected ‘double *’ but argument is of type ‘int’
double determinant(double * matrix, int n){
这是我的密码:

#include <malloc.h>
#include <stdio.h>

void Hilbert(int n, double H[n][n]) {
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            H[i][j] = (double)1.0 / ((i + 1) + (j + 1) - 1.0);
        }
    }
}

void printMatrix(int n, double matrix[n][n]) {
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%lf\t", matrix[i][j]);
        }
        printf("\n");
    }
}

double determinant(double * matrix, int n) {
    if (1 >= n) return matrix[0];
    double *subMatrix = (double*)malloc((n - 1)*(n - 1) * sizeof(double));
    double result = 0.0;
    int i, j, k;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n - 1; j++) {
            for (k = 0; k < i; k++)
                subMatrix[j*(n - 1) + k] = matrix[(j + 1)*n + k];
            for (k = i + 1; k < n; k++)
                subMatrix[j*(n - 1) + (k - 1)] = matrix[(j + 1)*n + k];
        }
        if (i % 2 == 0)
            result += matrix[0 * n + i] * determinant(subMatrix, n - 1);
        else
            result -= matrix[0 * n + i] * determinant(subMatrix, n - 1);
    }
    free(subMatrix);
    return result;
}

int main() {
    int i, j;
    int n = 4;
    double H[n][n];
    Hilbert(n, H);
    printf("\nThe Hilbert matrix is:\n");
    printMatrix(n, H);
    printf("\nThe determinant using Cramer’s Rule is: \%lf\n", determinant(n, H));
}
#包括
#包括
void-Hilbert(int-n,双H[n][n]){
int i,j;
对于(i=0;i=n)返回矩阵[0];
double*子矩阵=(double*)malloc((n-1)*(n-1)*sizeof(double));
双结果=0.0;
int i,j,k;
对于(i=0;i
只需在
printf
调用中交换
行列式的参数,如下所示:

determinant(H,n)
要抑制警告,您可能还需要参考第一行而不是整个矩阵:

determinant(H[0],n)

遗憾的是,这没有起作用。我现在也犯了类似的错误。在函数“main”中:警告:从不兼容的指针类型[enabled by default]printf(“\n使用Cramer规则的行列式是:\%lf\n”,行列式(H,n));^注意:应为'double',但参数类型为'double()[(sizetype)(n)]'双行列式(double*矩阵,int n){@meten:H[0]
(或
&H[0][0]
)是正确的解决方案。您尝试过吗?