Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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;
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Napisem len nieco vseobecne: toto co robis je IMHO vseobecne nie moc dobra praktika, ptz si nemozes… poslední
MM.. 29.12.2006 02:29
MM..

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)

Zpět do poradny Odpovědět na původní otázku Nahoru