有两种不同大小的结构:
struct A{
int x, y, z;
};
struct B{
float x, y;
};
在运行时,程序会生成这两个结构的一系列实例。
手写的例子可能如下:
Struct A a0 = { ... };
Struct A a1 = { ... };
Struct B b0 = { ... };
Struct A a2 = { ... };
Struct B b1 = { ... };
Struct B b2 = { ... };
因此,在这种情况下,“序列”是a0, a1, b0, a2, b1, b2
。
我想将此序列“放置”到某个数据结构中。 (完整序列的长度仅在运行时已知,以及struct A
和struct B
的每个实例的外观顺序。)
最简单的方法是什么?
例如,在Python中,我会做类似的事情:
Class A:
def __init__(self, x, y, z):
self.x, self.y, self.z = x, y, z
Class B:
def __init__(self, x, y):
self.x, self.y = x, y
# Manual example
a0 = A(...)
a1 = A(...)
b0 = B(...)
a2 = A(...)
b1 = B(...)
b2 = B(...)
my_list = []
# The list gets updated as the program runs
my_list.append(a0)
my_list.append(a1)
my_list.append(b0)
my_list.append(a2)
my_list.append(b1)
my_list.append(b2)
# etc., etc.
如何在C中执行等效操作?
答案 0 :(得分:1)
使用指针可以使异构数组成为可能。
typedef struct A {
int x;
int y;
int z;
}*PA;
typedef struct B {
float x;
float y;
}*PB;
void main() {
void * Instance[2];
A a;
B b;
Instance[0] = &a;
Instance[1] = &b;
((PA)(Instance[0]))->x = 2;
}
但是现在你可以有任何类型提出一个问题,你怎么知道在任何给定的索引中你应该知道什么类型?如果您决定只启动允许的编目类型,那么为什么不使用联合呢?