我将一个矩阵作为 float** 指针传递给一个函数,该函数所做的唯一事情就是打印指针指向的矩阵中的元素。然而,print语句中的元素全部为0。我怀疑我是否正确初始化了指针 xadjm。
#include <stdio.h>
#include <stdlib.h>
void which(float **adj_mat, int n) {
for (int tt=0; tt<n; tt++) {
for (int cc=0; cc<n; cc++) {
if (cc==(n-1)) {
printf("%f-\n", *(adj_mat+tt*n+cc));
} else {
printf("%f-", *(adj_mat+tt*n+cc));
}
}
}
}
int main() {
int n=5;
float adjm[5][5] = {{0.0, 1.0, 1.0, 0.0, 0.0}, {1.0, 0.0, 0.0, 1.0, 0.0}, {1.0, 0.0, 0.0, 1.0, 0.0}, {0.0, 1.0, 1.0, 0.0, 1.0}, {0.0, 0.0, 0.0, 1.0, 0.0}};
float **xadjm = (float**) adjm;
which(xadjm, n);
return(0);
}
执行代码的输出:
0.000000-0.000000-0.000000-0.000000-0.000000-
0.000000-0.000000-0.000000-0.000000-0.000000-
0.000000-0.000000-0.000000-0.000000-0.000000-
0.000000-0.000000-0.000000-0.000000-0.000000-
0.000000-0.000000-0.000000-0.000000-0.000000-
最佳答案
您执行的转换无效。
您正在尝试将 float[5][5]
转换为 float **
。虽然数组确实衰减为指向其第一个元素的指针,但仅适用于最外层数组维度。它不适用于内部尺寸。
但是,您可以做的是将参数列表中的数组维度指定为 which
:
void which(int n, float adj_mat[n][n]) {
然后你可以这样调用它:
which(n, adjm);
您的打印也不正确:
if (cc==(n-1)) {
printf("%f-\n", *(adj_mat+tt*n+cc));
} else {
printf("%f-", *(adj_mat+tt*n+cc));
}
表达式*(adj_mat+tt*n+cc)
为您提供一个float *
,而不是float
。相反,请执行以下操作:
if (cc==(n-1)) {
printf("%f-\n", adj_mat[tt][cc]);
} else {
printf("%f-", adj_mat[tt][cc]);
}
关于C - float** 函数参数不传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52784724/