处理C结构的数组
我得了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},
#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*
,循环将自动调整自身。!!(“您应该”-顺便问一下,他为什么应该这样做?使用自动变量很好…)