如果我们struct A
及其实例A1
,A2
,A3
和struct B
包含实例B1
,B2
,B3
是否提供了2D数组,以便它可以包含值:
ARRAY[][]={{&A1, &A2},{&B1, &B2}}
这种方法容易出错吗?
答案 0 :(得分:1)
您可以将其设为void *
的数组,该数组是有效的C.但您必须记住,为了取消引用指针,当时必须知道类型
void * ARRAY[][]={{&A1, &A2},{&B1, &B2}};
有效,但是你必须提供解除引用的类型
*(struct A *)ARRAY[0][0]
可能更人性化的方法是使用指向union的指针。但我会劝阻两者,只使用两个阵列。
union AandB {
struct A A;
struct B B;
};
// compiler will issue a warning if you don't typecast here
union AandB * ARRAY[][]={{(union AandB *)&A1, (union AandB *)&A2},{(union AandB *)&B1, (union AandB *)&B2}};
*ARRAY[0][0].A;
*ARRAY[1][0].B;