分配2d数组C.

时间:2012-05-20 12:49:14

标签: c pointers multidimensional-array

我有结构和函数,我想在我的struct中指定一个数组指针指针:

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 个答案:

答案 0 :(得分:1)

不幸的是,无法分配数组。

由于两个数组都具有相同的尺寸和大小(是吗?),最简单的方法是使用memcpy

memcpy(st->array, array, sizeof st->array);

答案 1 :(得分:0)

首先,如果你使用一维表会更简单。这是一个例子。注意保持指针和固定大小的表之间的区别!

typedef struct
{
   int* array;
} some_struct;

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

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

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

答案 2 :(得分: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);

答案 3 :(得分:0)

如果array是struct-declaration中的第一个成员,则可以简单地将其复制为:

struct
{
int array[3][2]

}some_struct;

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

所有其他struct-members都在这里被销毁,只有你的struct只包含数组成员才有意义。