我有这个标题:
#define SIZE 4
typedef float matrix[SIZE][SIZE];
typedef struct {
char *name;
matrix *mat;
} matRec;
void printMat(matrix *);
void read_mat(matrix , float []);
主要声明:
matrix m[6];
matRec mats[6] = {
{"MAT_A", &m[0]},
{"MAT_B", &m[1]},
{"MAT_C", &m[2]},
{"MAT_D", &m[3]},
{"MAT_E", &m[4]},
{"MAT_F", &m[5]}
};
struct {
char *name;
void (*func)();
} cmd[] = {
{"read_mat", read_mat},
{"not_valid", NULL}
};
这也是我主要的一部分:
(*(cmd[func].func))(&mats[matrixx].mat, num);
printMat(mats[matrixx].mat);
我的printMat函数主要在:
void printMat(matrix *matrx) {
int i,j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
printf("%7f ", matrx[i][j]);
}
printf("\n");
}
printf("\n");
}
和read_mat函数(在另一个文件中):
void read_mat(matrix matrx, float num[]) {
int i, j, count = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
matrx[i][j] = num[count];
count++;
}
}
}
我的目的是从数组发送我的矩阵的地址:垫子,浮点数组,插入它们,并用另一个函数打印矩阵。我发送地址有困难。 read_mat函数确实“工作”,但是使用矩阵的副本(在函数的范围内),然后显然打印只有零的矩阵。我不明白如何使用函数声明中的指针编写正确类型的参数。 *的任何其他组合都会出错。谢谢
我想很少有类型信息可以帮到你。在这里说这个
matrix m[6];
你基本上是在宣布
float m[6][SIZE][SIZE];
然后类型的m[0]
只不过是float [SIZE][SIZE]
或matrix
。
所以,当我将它的地址传递给函数时,它就是
somefun(&m[0]);
你会像这样声明并使用它
..somefun(matrix *t){
for(int i = 0; i< SIZE; i++)
for(int j =0 ; j< SIZE; j++)
printf("%lf",(*t)[i][j]);
..
}