我的问题与此相关:c 在struct中定义不同大小的数组 https://stackoverflow.com/questions/17956697/c-define-arrays-in-struct-with-different-sizes
但是,我不想使用动态分配(嵌入目标)。
In C,我想要相同结构的两个版本,每个版本的大小不同static数组。
相同的函数将通过指针参数使用这两个结构。
typedef struct {
short isLarge; //set 0 at initialization
short array[SIZE_A];
//more arrays
} doc_t;
typedef struct {
short isLarge; //set 1 at initialization
short array[SIZE_B];
//more arrays
} doc_large_t;
void function( doc_t* document ) {
if ( document->isLarge ) {
//change document into doc_large_t* [1]
}
//common code for both doc_t and doc_large_t
}
(1) 上面的描述需要一种方法将指针 doc_t* 指针动态转换为 doc_large_t* 文档 [1]。那可能吗 ?如何 ?
(2) 我提出的另一个解决方案是为两个结构提供一个公共头数据部分,不仅包括 isLarge 标志,还包括指向以下静态数组的指针。那有多丑?
(3) 另外,你有我可以使用的好技巧或解决方法吗?
EDIT :
我的应用程序是在嵌入式 MCU 上进行寻路。
我有几何对象,例如多边形。多边形可以描述简单的矩形障碍物,也可以描述更复杂的形状(例如可到达的区域)。
复杂多边形可以具有大量顶点,但数量很少。简单的多边形很常见。
两者都将使用相同的算法。
我提前知道哪个多边形需要更多顶点。
我想做的是优化工作内存,使其适合 MCU。 (即小形状得到小数组;复杂形状得到大数组)