我有结构和函数,我想在我的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 ??
}
答案 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只包含数组成员才有意义。