Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理C结构的数组_C_Arrays_Struct - Fatal编程技术网

处理C结构的数组

处理C结构的数组,c,arrays,struct,C,Arrays,Struct,我得了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 MyStructList[MAX_LIST]= { {{100, 200}, RGB_TYPE, 25.0},

我得了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 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 */
 }
mystruct配置;
int i=0;
.....

对于(i=0;i它看起来还可以,但请注意,
config=MyStructList[i];
会生成结构的浅层副本。如果要对原始数组进行操作,mystruct应该是一个指针,该指针采用MyStructList[i]的地址

例如:

for(i=0;i<4;i++)
{
  mystruct * config = &MyStructList[i];
  some_func(i, config);
}

for(i=0;i而不是说
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 );

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

struct
s是可赋值的,因此
config=MyStructList[i]
很好。还有什么疑问吗?我看不到任何错误,但我不知道您的目标是什么。如果要将其分配给其他“MyStructList[i]”,您需要“config”吗?您可以“使用pstruct值并将其存储在内部数组中”执行一些功能(i和MyStructList[i])您将pstruct值存储到哪些内部数组?当您说“pstruct values”时,您是指传递给
some_func
的指针还是结构
pstruct
点的值?顺便说一下,您可以用
sizeof(MyStructList)/sizeof(*MyStructList)替换幻数
4
。然后,如果您将项目从MyStructList.Dat kast添加或删除到
mystruct*
,循环将自动调整自身。!!(“您应该”-顺便问一下,他为什么应该这样做?使用自动变量很好…)