c - 二维数组,其中每行都有不同类型的结构指针

标签 c arrays pointers

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

是否有一个二维数组可以包含值的规定:

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/

相关文章:

c - 将 cgo 与 typedef 变量一起使用

c - 如何在服务器线程和客户端线程之间同步?

java - 在 Java 中打印基元数组

c - C语言中如何计算数组元素的个数?

c - getchar() 和 putchar() 函数背后的理论

javascript - 将我的 Javascript 数组放入表中

java - 使用 String#split() 分割表达式

C 指针不一致

Objective-C:对象实例指针

c - (C) 函数之间和函数内——指针