´ nyelv C programozasi ´ Struktur ´ ak ¨ Dr. Schuster Gyorgy
2011. junius ´ 16.
¨ Dr. Schuster Gyorgy ()
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
1 / 11
´ Struktur ´ ak
´ Struktur ´ ak ¨ A struktura ´ egy olyan osszetett adatszerkezet, amely nemcsak ¨ azonos t´ıpusu´ elemeket rendelhet ossze. ´ aban ´ ´ ul A struktura ´ defin´ıcioj le´ırjuk, hogy a strutura ´ hogyan ep ¨ fel. ´ aul: ´ Peld struct ember { ´ Definialtunk egy olyan elemet, amely char nev[80]; ´ adatait. egyben tartalmazza egy egyen unsigned kor; float suly; }; ´ on ´ al ´ egy adott peld ´ anyt ´ ´ ´ A deklaraci hozunk letre. Pelda: ´ ´ egy Jozsi (jozsi) mar struct ember jozsi; ´ szemely. ´ konkret
¨ Dr. Schuster Gyorgy ()
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
2 / 11
´ Struktur ´ ak
˝ ´ er ´ es ´ kozvetlen ¨ ´ indirekt Mezohozz af es ´ any” ´ ˝ ehez ´ ˝ ´ er ´ es ´ operator ´ Egy struktura ´ ”peld adott mezoj a mezohozz af ´ evel ´ ´ unk ´ fer ¨ hozza. ’.’ seg´ıtseg jozsi.kor=43; ´ any ´ kor mezoje ˝ legyen egyenlo˝ 43-al. Ezutan ´ Vagyis a jozsi peld ´ ´ valtoz ´ ´ ugy ´ hasznaljuk, mint egy normalis ot. ´ any ´ neve, hanem a c´ıme van megadva ... Ha nem a peld struct ember jozsi; struct ember *jp; . . .
´ A jp altal megc´ımzett struktura ´ kor ˝ ˝ mezoje legyen egyenlo 43-al.
jp=&jozsi; . . . jp->kor=43; ¨ Dr. Schuster Gyorgy ()
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
3 / 11
´ Struktur ´ ak
Rekurz´ıv struktura ´ ´ es: ´ mit tartalmazhat egy struktura? Kerd ´ ´ ´ Valasz: barmilyen adatelemet, de nem tartalmazhat olyan ´ mint onmaga, ¨ ¨ ¨ struktur ´ at, se kozvetlen ul ¨ se kozvetetten. ¨ De tartalmazhat olyan ”t´ıpusu” ´ pointert, mint onmaga. ´ az ugynevezett Ilyen jellegu˝ alkalmazas ´ lista adatszekezet. Egy ilyen ´ struktura ´ defin´ıcioja: struct LIST { int v; struct LIST *next; };
A v az adatelem, a next az a pointer, ¨ amely a kovetkez o˝ elemre mutat. Valahogy ´ıgy.
NULL
¨ Dr. Schuster Gyorgy ()
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
4 / 11
´ Struktur ´ ak
´ definialt ´ struktura T´ıpuskent ´ ´ ´ ´ A struktur ´ akat a typedef utas´ıtassal is defin´ıalhatjuk. ´ Pelda: typedef struct ˝ kezdve van egy ember t´ıpusunk. Ettol { ´ ˝ azonosak az Lathatjuk, hogy a mezok char nev[80]; ˝ oekben ˝ ´ ´ eloz ”hagyomanyos” modon unsigned kor; ´ ´ ´ defini alt strukt ur ´ an al. float suly; } ember; ´ o´ egyszerus ¨ A deklaraci ˝ odik. ember jozsi;
A struct kulcsszo´ elmaradt.
´ ´ definialni ´ ´ Nem lehetseges rekurz´ıv struktur ´ at ezen a modon! ´ Miert? ´ derul A t´ıpus a struktura ´ utan ¨ ki. ´ azonos. Amugy ´ minden mas ¨ Dr. Schuster Gyorgy ()
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
5 / 11
´ Struktur ´ ak
˝ Bitmezok ´ jellegu˝ valtoz ´ ´ eseten ´ definialhat ´ ´ un. bitmezok. ˝ Egesz ok ok ¨ ´ ´ Osszehasonl´ıto pelda: struct chr { unsigned x; unsigned y; char code; }; ´ Ez minimum 9 bajt.
struct chr { unsigned x: 5; unsigned y: 7; unsigned code: 8; }; ´ Ez 20 bit, de nem lehet az alapt´ıpusnal ¨ ´ 4 bajt. ´ rovidebb, tehat
´ ¨ ´ ot. ˝ Ne feledjuk, ¨ hogy a bitek ”tologatasa” noveli a futasid ¨ ´ ara ´ hasznaljuk. ´ PC-s kornyezetben csak a hardver programozas ´ helytakarekoss ´ ´ szempontokbol ´ is hasznaljuk. ´ Kontrollereknel agi ¨ Dr. Schuster Gyorgy ()
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
6 / 11
´ Struktur ´ ak
´ Bitmezo˝ harver pelda Az Intel 8254 timer IC parancs regisztere:
SC1 SC0 RL1 RL0 M2 7
6
typedef struct { unsigned char unsigned char unsigned char unsigned char } c8254; ¨ Dr. Schuster Gyorgy ()
5
4
3
M1
M0 BCD
2
1
0
bcd: 1; m: 3; rl: 2; sc: 2;
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
7 / 11
union
union ´ szerkezet. Arra szolgal, ´ hogy egy adott memoriater ´ Specialis uletet ¨ ¨ ´ eppen ´ ´ tobbf elek erhess unk ¨ el. ´ Pelda: ´ Defin´ıcio: union smpl { float a; int b; }; ´ o: ´ Deklaraci . . . union sample minta; . . . ¨ Dr. Schuster Gyorgy ()
.. .m in fl ta. a. oa .. t
. .. .b a t in .m int ..
minta
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
8 / 11
union
´ pelda ´ Funkcionalis ´ ıtog ´ epr ´ ol ˝ egy masikra ´ Feladat egy float adatot kell egyik szam´ ´ uldeni, ´ ´ ´ ıtani. atk ¨ de az adatcsatorna csak bajtokat kepes tovabb´ ´ ´ Celszer u˝ egy uniont-t hasznalni.
union IFC { float f; char b[4]; } ifc;
r=ifc.f;
ifc.f=3.1415;
ifc.b[3] ifc.b[2] ifc.b[1] ifc.b[0]
¨ Dr. Schuster Gyorgy ()
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
9 / 11
union
¨ Dr. Schuster Gyorgy ()
char c;
union SAMPLE pld;
&pld Erre nő a memóri cím
union SAMPLE { float f; short s; char c; } pld;
short s;
float f;
´ o˝ meret ´ u˝ mezok ˝ Elter
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
10 / 11
union
´ definialt ´ union T´ıpuskent ´ Hagyomanyos
´ T´ıpuskent
´ Defin´ıcio:
´ Defin´ıcio:
union smpl { float a; int b; };
typedef union { float a; int b; } smpl;
´ o: ´ Deklaraci
´ o: ´ Deklaraci
. . . union smpl pld; . . .
. . . smpl pld; . . .
¨ Dr. Schuster Gyorgy ()
´ nyelv Struktur ´ C programozasi ´ ak
2011. junius ´ 16.
11 / 11