【发布时间】:2021-11-17 17:12:13
【问题描述】:
我正在尝试制作一个用于粒子管理的小型库,允许使用用户数据(纹理、动画帧等)“扩展”结构。库只知道扩展结构的大小。 如何遍历未知结构类型但结构大小已知的数组?
typedef struct{
int type;
}Base;
typedef struct{
Base base;
int value;
}inherited;
int main(){
size_t size = sizeof(inherited);
int count = 10;
void *b = malloc(size * count);
for (int i = 0; i < count; i++){
// iterate based on known size & send to callback
callback( &( (size)b )[i] );
}
free(b);
return 0;
}
【问题讨论】:
-
“我如何遍历未知结构类型但结构大小已知的数组?” - 如果您不知道类型,那么您甚至都不知道知道尺码吧?要么你都知道,要么你都不知道。
-
为什么不使用指向
inherited的指针?inherited *p = malloc(size * count);使用此指针,您可以使用callback(&p[i]);寻址每个数组项。 -
@SPlatten 您的建议只有在将
b声明从void*更改为char*后才会起作用。void类型没有大小,所以void*不能用于指针算术。 -
相关:
typedef struct{ int type; size_t size; }Base;可能不是个坏主意? -
@NeZvers 我的意思是类似于 Ian Abbott 的回答。