Napisem len nieco vseobecne: toto co robis je IMHO vseobecne nie moc dobra praktika, ptz si nemozes byt isty ako bude reprezentovat dvojrozmerne pole nejaky (neznamy) prekladac (bude najprv prvy rozmer alebo druhy rozmer, bude tam alignment, apod). Ja viem ze standard je jasny a bude ti to fungovat na tom tvojom prekladaci, ale je to proste IMHO "spinave". Aj pouzivat absolutne cisla v programe je nevhodny zvyk, kvoli citatelnosti programu a kvoli lahkej zmene v buducnosti je vhodne pouzivat vopred definovane symboly(nazvy) namiesto cisel.
V C je na to o co sa snazis union, ale IMHO je bezpecnejsie zadefinovanie pola len raz ostatne pristupy robit napr. cez makro. Ja by som to urobil napr. takto (pouzijem syntax C):
#define SIRKA_SACHOVNICE 8
#define VYSKA_SACHOVNICE 8
int Sachovnica[SIRKA_SACHOVNICE * VYSKA_SACHOVNICE]; // toto je jedina definicia
#define SachovnicaXY(x,y) Sachovnica[x + y*SIRKA_SACHOVNICE]
A som si vzdy (na vsetkych prekladacoch a s akymkolvek nastavenim) isty ze co mam kde ulozene, a je to aj citatelnejsie a rozmer je lahko zmenitelny (asi ho nikto menit nebude ale ide mi vseobecne aj o ine cisla).
Pristup cez x,y cez to nasobenie moze byt menej efektivny (nie som si zhlavy isty ako preklada pristup na dvojrozmerne pole cez [x,y] na instrukcie CPU ci na to nie je efektivnejsia instrukcia ako nasobenie a scitanie)