2013-12-11 4 views
0

Если мы struct A и его экземпляры A1, A2, A3 и struct B с экземплярами B1, B2, B32D массива, где каждая строка имеет различный тип указателя структуры в

Есть ли какое-либо положение, имеющий 2D массив таким образом, что он может содержать значения:

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

Этот подход уязвим для ошибок?

+0

У вас может быть массив указателей. – Abhineet

+0

'ARRAY [] []'> ---> 'ARRAY [] [2]' – BLUEPIXY

ответ

1

Вы можете сделать это массив 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; 
Смежные вопросы