如果我们有struct A
及其实例A1
、A2
、A3
和struct B
包含实例 B1
、B2
、B3
是否有一个二维数组可以包含值的规定:
ARRAY[][]={{&A1, &A2},{&B1, &B2}}
这种方法容易出错吗?
最佳答案
您可以将其设为有效的 C 数组 void *
。但您必须记住,为了取消引用指针,必须知道类型 那时。
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;
关于c - 二维数组,其中每行都有不同类型的结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20521783/