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

问题描述 投票:0回答:1

我有这个标题:

#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函数确实“工作”,但是使用矩阵的副本(在函数的范围内),然后显然打印只有零的矩阵。我不明白如何使用函数声明中的指针编写正确类型的参数。 *的任何其他组合都会出错。谢谢

c matrix
1个回答
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]);  
    ..
   }
© www.soinside.com 2019 - 2024. All rights reserved.