0

私は struct と function を持っています.1つの配列ポインタを構造体のポインタに割り当てたいです:

struct
{
int array[3][2]

}some_struct;

void example(some_struct* st, int array[3][2])
{

     //st->array=array 
     //st->array[0]=array[0],st->array[1]=array[1],st->array[2]=array[2]

  // how to do that ??

}
4

4 に答える 4

1

残念ながら、アレイ自体を割り当てることはできません。

両方の配列の寸法とサイズが同じであるため(そうですか?)、最も簡単な方法は次のmemcpyとおりです。

memcpy(st->array, array, sizeof st->array);
于 2012-05-20T13:30:15.250 に答える
0

配列がstruct-declarationの最初のメンバーである場合は、次のように簡単にコピーできます。

struct
{
int array[3][2]

}some_struct;

void example(some_struct* st, int array[3][2])
{
  *st = *(some_struct*)array;
}

他のすべての構造体メンバーはここで破棄されます。構造体に配列メンバーのみが含まれている場合にのみ意味があります。

于 2012-05-27T18:16:22.550 に答える
0

私が見ているように値をコピーしたいだけなら、次のようにします:

struct
{
int array[3][2]

}some_struct;

void example(some_struct* st, int *array, int dim)
{
     int i;
     for(i = 0; i<dim; i++)
        st->array[i]=array[i];
}

//Use:
some_struct try_st;
array[3][2] orig_st;
//put your data in the array

example(try_st, orig_st, 3*2);
于 2012-05-20T13:51:08.643 に答える
0

まず、1 次元のテーブルを使用すると、はるかに簡単になります。これが例です。ポインターを保持することと固定サイズのテーブルを保持することの違いに注意してください!

typedef struct
{
   int* array;
} some_struct;

void example (some_struct* st, int* array)
{
    st->array = array;
}

それでも 2 次元のものを使用したい場合は、メモリ内で線形である必要がないため、2 番目のレベルのすべてのテーブルを割り当てる必要があります。

編集:2次元配列が実際にCのメモリ内で常に線形である場合、関数のパラメーターとして2次元配列を指定すると、上記のステートメントが機能するはずですexample

于 2012-05-20T12:56:22.677 に答える