私はこのヘッダーを持っています:
#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++;
}
}
}
私の目的は、配列から行列のアドレスを送信することです。浮動小数点数の配列を含むmatsを挿入し、それらを挿入して、別の関数で行列を出力します。アドレスの送信に問題があります。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]);
..
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加