2

我有一个形式的 C 结构:

#define RGB_TYPE 1
#define YUV_TYPE 2
#define MAX_LIST 20


typedef struct
{
    uint16_t a[2];
    uint8_t b;
    float_t c;

} mystruct;

我有一个这样的 mystruct 数组

 mystruct MyStructList[MAX_LIST]=  {
       {{100, 200}, RGB_TYPE, 25.0},          
       {{200, 400}, RGB_TYPE,25.0}, 
       {{300,600} ,YUV_TYPE ,30.0},
           {{400,600},YUV_TYPE, 30.0}


};

在我的代码中,我执行以下操作;

 mystruct config;
 int i = 0;

 .....
 for(i=0;i<4;i++)
{
    config = MyStructList[i];
    /* further processing on config */
  some_func(i,&config);

}


int  some_func(int x, mystruct* pstruct );
{
        /* using pstruct values and storing them in internal arrays */
 }

这种结构复制和处理是否有效?我正在使用 mingw gcc

4

3 回答 3

2

它看起来不错,但请注意,它config = MyStructList[i];会生成结构的浅表副本。如果要对原始数组进行操作,mystruct 应该是一个指针,它取 MyStructList[i] 的地址。

例如:

for(i=0;i<4;i++)
{
  mystruct * config = &MyStructList[i];
  some_func(i, config);
}
于 2013-05-13T19:24:11.987 回答
0

而不是说config = MyStructList[i];您应该分配使用所需的元素数量malloc。例如,在循环体中,你应该说

mystruct * config = ( mystruct *) malloc ( i * sizeof ( mystruct ) );
some_func ( i, config );   // You do not have to use address because config is a pointer type now
free ( config );
于 2013-05-13T19:24:40.897 回答
0

这种副本是有效的。它可能效率不高,您可以在调用 some_func() 时只使用指向原始结构的指针。然后在 some_func 中,您将其值的副本存储在内部数组中。

于 2013-05-13T19:43:07.173 回答