C - 矩阵的地址作为函数的参数

时间:2017-12-23 10:52:36

标签: c matrix

我有这个标题:

$overviewArray = json_decode(json_encode($result), true);

主要声明:

#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}
};

我在主要的printMat函数:

(*(cmd[func].func))(&mats[matrixx].mat, num);
printMat(mats[matrixx].mat);

和read_mat函数(在另一个文件中):

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");
}

我的目的是从数组发送我的矩阵的地址:mats,浮点数组,插入它们,并用另一个函数打印矩阵。我发送地址有困难。 read_mat函数确实“工作”,但是使用矩阵的副本(在函数的范围内),然后显然打印只有零的矩阵。我不明白如何使用函数声明中的指针编写正确类型的参数。 *的任何其他组合都会出错。致谢

1 个答案:

答案 0 :(得分:1)

我想很少有类型信息可以帮到你。在这里说这个

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]);  
    ..
   }