2012-05-20 236 views
0

我有結構和功能,我要指派一個陣列poiner在我的結構的指針:分配二維數組ç

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

你想讓'st-> array'指向''array'還是你想將'array'的值複製到'st-> array'? –

回答

0

首先,這將是,如果你使用的一維更簡單表。這是一個例子。請注意持有指針和固定大小的表之間的區別!

typedef struct 
{ 
    int* array; 
} some_struct; 

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

如果你仍然想使用2維的,你真的需要第二級的每一個分配表,因爲他們沒有在內存中是線性的。

編輯:如果2維數組確實一直在內存中的線性C,如果你給它2維數組作爲參數傳遞給example功能上述聲明應該工作。

+2

'因爲它們在內存中不必是線性的。在C二維數組中總是線性的。 –

+0

哦,我會改變我的答案。 –

1

不幸的是,陣列本身不能分配。

由於兩個陣列具有相同的尺寸和大小(是嗎?)最簡單的就是使用memcpy

memcpy(st->array, array, sizeof st->array); 
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); 
0

如果數組是在結構聲明的第一個成員,你可以簡單的複製它想:

struct 
{ 
int array[3][2] 

}some_struct; 

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

所有其他結構成員在這裏被銷燬,它只有在你的結構只包含數組成員時纔有意義。