c - 传递参数从整数生成指针,没有强制转换/预期的“双 *”,但参数的类型为“int”
问题描述
我对 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));
}
解决方案
只需像这样交换调用determinant
中的参数printf
:
determinant(H,n)
为了抑制警告,您可能还需要参考第一行而不是整个矩阵:
determinant(H[0],n)
推荐阅读
- javascript - 如何让 eslint 忽略 Vue.js 中的“未定义事件总线”错误?
- magento - 未捕获的错误:无法实例化接口 IndexTableRowSizeEstimatorInterface
- python - 检查用户是否具有特定角色
- swift - 无效的狗脸标量
- python - 您无权查看此页面。HTTP 错误 401.2 - 未经授权:由于服务器配置,访问被拒绝
- jenkins - 使用詹金斯管道在詹金斯上显示视图列的值
- r - 使用 magrittr 将 testthat 添加到项目中
- python - 如何从满足条件的数据框中提取列和行索引
- ios - KeyboardAvoidingView 不适用于 redux 形式的字段
- c# - 查看符号表