2D数组,其中每行具有不同类型的结构指针

时间:2013-12-11 14:29:21

标签: c arrays pointers

如果我们struct A及其实例A1A2A3struct B包含实例B1B2B3

是否提供了2D数组,以便它可以包含值:

ARRAY[][]={{&A1, &A2},{&B1, &B2}}

这种方法容易出错吗?

1 个答案:

答案 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;