Вы можете сделать это массив void *
который действует C. Но вы должны иметь в виду, что для того, чтобы разыменования указателя типа должен быть известен в то время.
void * ARRAY[][]={{&A1, &A2},{&B1, &B2}};
допустима, но тогда вы должны поставить тип на dereferenscing
*(struct A *)ARRAY[0][0]
читаемом подход, вероятно, более человеческий будет использовать указатель объединения. Но я бы отговорил обоих и просто использовал два массива.
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;
У вас может быть массив указателей. – Abhineet
'ARRAY [] []'> ---> 'ARRAY [] [2]' – BLUEPIXY