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

1: Jak jsem napsal výše: Delphi dovoluje zjednodušení (o proti standardnímu Pascalu - ten to nedovoluje), že místo řídící proměnné záznamu stačí uvést jen její typ. Programátor pak musí sám rozhodnout (v programu), kdy a jak bude danou část paměti interpretovat. Například součástí unity SysUtils je následující definice:

  WordRec = packed record
    case Integer of
      0: (Lo, Hi: Byte);
      1: (Bytes: array [0..1] of Byte);
  end;
Typem WordRec můeme dle libosti interpretovat hodnotu typu word jako její horní bajt Hi a dolní bajt Lo nebo jako pole bajtů Bytes [0] a Bytes [1]. V SysUtils najdeš ještě další užitečné redefinice, například: LongRec a Int64Rec.

//Edit: V tebou uvedené deklaraci může programátor dle libosti, chutě a podle toho, jak se mu který algoritmus lépe dělá interpretovat šachovnici jako:
yx - dvourozměrné pole 8x16 s bajtovou hodnotou, indexováno yx [y, x] nebo:
yxs - dvourozměrné pole 8x16 s ShortInt hodnotou, indexováno yxs [y, x] a konečně nebo:
r - jednorozměrné pole 128 bajtů furt za sebou, indexováno r [x] ...
Jedná se ale furt o totéž místo paměti, takže výrazy: yx [1, 0], yxs [1, 0], r [16] označují furt jeden a tentýž bajt.
(Proč však má šachovnici 8x16 to nevím :)))

2. Packed mělo a má stále význam a to, že v záznamu nebudou generovány výplňkové bajty. Narozdíl od standartního Pascalu, kde packed určuje komprimovaný způsob uložení. Slovo packed v record je IMHO (Jez.) názornější, než direktiva $A-. Navíc direktiva $A- zatrhne výpňkové bajty na celou junitu, což rozhodně není žádoucí. Leda furt uvádět $A- a pak $A+.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny