0

我有 struct 和 function ,我想将一个数组指针分配给我的结构中的指针:

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
{
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

首先,如果使用一维表会简单得多。这是示例。请注意持有指针和固定大小的表格之间的区别!

typedef struct
{
   int* array;
} some_struct;

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

如果您仍想使用二维表,则确实需要分配第二级的每个表,因为它们不必在内存中是线性的。

编辑:如果二维数组在 C 中的内存中确实总是线性的,那么如果将二维数组作为example函数的参数,上述语句应该可以工作。

于 2012-05-20T12:56:22.677 回答
0

如果数组是结构声明中的第一个成员,您可以简单地复制它,如下所示:

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 回答