C-関数の引数としての行列のアドレス

バブーシュカ

私はこのヘッダーを持っています:

#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関数は「機能」しますが、(関数のスコープ内の)行列のコピーを使用すると、明らかにゼロのみの行列を出力します。関数の宣言でポインタを使って正しいタイプの引数を書く方法がわかりません。*の他の組み合わせはエラーになります。ありがとう

user2736738

タイプ情報のいくつかがあなたを助けると思います。ここでこれを言うことによって

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]

編集
0

コメントを追加

0

関連記事

分類Dev

Cの関数引数と変数アドレス

分類Dev

system()は、Cの関数のchar *引数アドレスを変更します

分類Dev

引数としての関数内のC ++コード

分類Dev

関数の出力引数としてのC ++関数

分類Dev

可変個引数テンプレート引数としてのC ++テンプレート関数エイリアス

分類Dev

C / C ++の関数内の関数のアドレスを取得しますか?

分類Dev

関数の引数としてのC ++ Pass Boost :: log重大度レベル

分類Dev

Cの関数引数としての配列の奇妙な出力

分類Dev

Cの関数の引数としての和集合

分類Dev

関数の引数としてのC ++クラスが機能しない

分類Dev

Cでスレッドの引数として文字列を渡す方法

分類Dev

関数の引数としてのc ++クラスオブジェクト

分類Dev

C ++の関数の引数として抽象クラスを使用する

分類Dev

別の関数の引数として可変数と引数のタイプを持つC ++関数

分類Dev

c ++関数の引数としてのクラスメソッドポインタ

分類Dev

Cの関数への引数として配列を渡す

分類Dev

Cのマクロ関数-引数としての論理?

分類Dev

引数としての関数へのc ++ポインタ

分類Dev

テンプレート引数としてのC ++オーバーロード関数

分類Dev

C ++で「size_type」変数のアドレスが「stoi()」の引数として使用されるのはなぜですか?

分類Dev

cの関数の引数としての「char [] name」と「charname []」の違い

分類Dev

C関数の引数としてポインタを渡す

分類Dev

C ++-関数への引数としてrapidjson :: Documentを渡す

分類Dev

Cで関数の引数をconstとして宣言する

分類Dev

C関数の引数として構造体を渡す

分類Dev

引数としてのc ++関数(本体付き)

分類Dev

C-関数の引数として配列を返す

分類Dev

Cの関数ポインタとメモリアドレス

分類Dev

引数として渡されたときに、関数内のポインタアドレスを更新します。[Cで参照としてポインタを渡す]

Related 関連記事

  1. 1

    Cの関数引数と変数アドレス

  2. 2

    system()は、Cの関数のchar *引数アドレスを変更します

  3. 3

    引数としての関数内のC ++コード

  4. 4

    関数の出力引数としてのC ++関数

  5. 5

    可変個引数テンプレート引数としてのC ++テンプレート関数エイリアス

  6. 6

    C / C ++の関数内の関数のアドレスを取得しますか?

  7. 7

    関数の引数としてのC ++ Pass Boost :: log重大度レベル

  8. 8

    Cの関数引数としての配列の奇妙な出力

  9. 9

    Cの関数の引数としての和集合

  10. 10

    関数の引数としてのC ++クラスが機能しない

  11. 11

    Cでスレッドの引数として文字列を渡す方法

  12. 12

    関数の引数としてのc ++クラスオブジェクト

  13. 13

    C ++の関数の引数として抽象クラスを使用する

  14. 14

    別の関数の引数として可変数と引数のタイプを持つC ++関数

  15. 15

    c ++関数の引数としてのクラスメソッドポインタ

  16. 16

    Cの関数への引数として配列を渡す

  17. 17

    Cのマクロ関数-引数としての論理?

  18. 18

    引数としての関数へのc ++ポインタ

  19. 19

    テンプレート引数としてのC ++オーバーロード関数

  20. 20

    C ++で「size_type」変数のアドレスが「stoi()」の引数として使用されるのはなぜですか?

  21. 21

    cの関数の引数としての「char [] name」と「charname []」の違い

  22. 22

    C関数の引数としてポインタを渡す

  23. 23

    C ++-関数への引数としてrapidjson :: Documentを渡す

  24. 24

    Cで関数の引数をconstとして宣言する

  25. 25

    C関数の引数として構造体を渡す

  26. 26

    引数としてのc ++関数(本体付き)

  27. 27

    C-関数の引数として配列を返す

  28. 28

    Cの関数ポインタとメモリアドレス

  29. 29

    引数として渡されたときに、関数内のポインタアドレスを更新します。[Cで参照としてポインタを渡す]

ホットタグ

アーカイブ