2

バックグラウンド

2 つの 2D 配列を持つ構造体があります...

typedef struct v
{
    int *b;
    int *a;
} v;

私の主な機能の中には...

int A [M][K] = {{2,2},{2,2}, {3,2} };
int B [K][N] = {{2,2,2},{2,2,2}};
struct v *data= (struct v *) malloc(sizeof(struct v));
data.a->A;
data.b->B;
pthread_create(&multiplicationWorker, NULL, (void *) &alterAarrays,  data);

...そしてプライベート機能...

void alterArrays ( v* coords)
{
    ...
}

質問:

内部の 2D 配列への参照を渡したいalterArrays。また、このように 2D 配列の値を割り当てることもできません。助言がありますか?

4

1 に答える 1

2

サイズの定義:

#define K 2
#define M 3
#define N 3

構造体で配列を使用する場合:

a構造体を定義します (これらとを呼び出すつもりでしたbか? コードではこれを参照しています。また、元の次元はコード内の配列とは異なります。

typedef struct v
{
    int a [M][K];
    int b [K][N];
} v;

次に、コピー:

int A [M][K] = {{2,2},{2,2}, {3,2} };
int B [K][N] = {{2,2,2},{2,2,2}};
struct v *data= (struct v *) malloc(sizeof(struct v));

memcpy(data->a, A, M * K * sizeof(int));
memcpy(data->b, B, K * N * sizeof(int));

構造体でポインターを使用する場合:

構造体を定義します:

typedef struct v
{
    int (*a)[K];
    int (*b)[N];
} v;

Aそして、グローバルにする必要があるBため、それらはスタック上にありません。したがって、ソース ファイルの先頭でそれらを定義します。

int A [M][K] = {{2,2},{2,2}, {3,2} };
int B [K][N] = {{2,2,2},{2,2,2}};

次に、割り当て:

struct v *data= (struct v *) malloc(sizeof(struct v));

data->a = A;
data->b = B;
于 2012-10-21T21:07:31.947 に答える