Posted By: Quasimodo (Quasimodo) on 'CZprogram' Title: Re: Proc se zmeni hodnota v u.i? Date: Sat Jan 11 21:57:57 2003 > int main(int argc, char **argv) > { > union { > int i; > char c[sizeof(int)]; > } u; > > u.i = 0; > u.c[0] = 1; > puts(u.i == 1 ? "little endian" : "big endian"); > > return 0; > } > > de to zkompilvat, samozrejmne az tady na ten radek... > a tenhle a signaturu... > > > Nehodlam vysvetlovat a ... > ... Sipu si popel na *hlavu* > Tak ted jsem zmatenej, nevim na co se ptas. Nebo jestli je to odpoved na neco z nedavne doby bez re...? Nicmene pokud ten dotaz je v nadpise a skutecne nevis, co je union a proc se meni u.i, zkusim vysvetlit: Union je tu prave od toho, aby se dve nebo vice ruznych veci dalo napsat na totez misto v pameti - bud aby nezabiraly misto, nebo abys mohl zkoumat treba prave bytovou reprezentaci jak tu prevadis. Typicky na IA32 budes mit int 4bytovy, char je jednobajt. Ty si zadefinujes union u od nejake adresy - rekneme pro jednoduchost 0x00. Zapises do toho (int)0, coz je 00 00 00 00. Cely union ted obsahuje v pameti 0x00 : 00 00 00 00 Do u.c[0] zapises jednicku. Takze v pameti ted mas 0x00: 01 00 00 00 Pokud to byl little endian, tak u.i je ted 1. Pokud big endian, tak mas v u.i cislo 2^24. Velikost unionu je dana velikosti nejvetsiho jejiho prvku a vsechny prvky jsou v pameti ulozeny od stejne pocatecni adresy. - Clovek je nejpomalejsi zname zarizeni typu I/O. Quasimodo