
Prístup k jednej premennej z viacerými typmi deklarácie
Keď mám takúto definíciu premennej
var xy: array[0..7, 0..7] of Integer;
a chcem k nej pristupovať aj ako
var xy: array[0..63] of Integer;
tak mám na výber dve možnosti:
1.
var
xy1: array[0..7, 0..7] of Integer;
xy2: array[0..63] of Integer absolute xy1;
2.
var
xy: record
case Byte of
1: a: array[0..7, 0..7] of Integer;
2: b: array[0..63] of Integer;
end;
end;
Vie mi niekto vysvetliť, načo je dobrá druhá definícia a v čom je výhodnejšia? Prvá definícia je použiteľná v TP a myslím aj v Delphi. Overené nemám. A zaujímalo by ma hlavne toto:
1. Čo znamená Byte v case? Prečo tam nie je Word alebo niečo iné? Načo to tam vôbec je?
2. Čo znamenajú tie čísla vo vetvení case?
Viem o čo sa jedná, ale nechápem tomu vetveniu, prečo to nejde napísať nejako takto (môj výmysel):
var
xy: record
switch
a: array[0..7, 0..7] of Integer;
b: array[0..63] of Integer;
end;
end;
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)