Michal Kyžňanský / 09. 11. 2005, 00:00
Dnes si povieme o štruktúrach, ich deklarovaní a samozrejme využití. Všetko si ukážeme na názorných príkladoch. Keď budeme hovoriť o štruktúrach, je načase si objasniť aj ako funguje pointer – ukazovateľ.
typedef struct{ typedef struct zoznam{ char meno[20]; char meno[20]; int cislo; int cislo; char priezvisko[20]; struct zoznam *databaza; }ZOZNAM; }ZOZNAM;
#include#pragma hdrstop #include "Unit1.h"
typedef struct{ AnsiString meno; int cislo; AnsiString priezvisko; }ZOZNAM; //-------------------------------------------------
#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner) { }
Takýto je spôsob zápisu do prvkov štruktúry pri dynamickej deklarácii premennej typu ZOZNAM :
void __fastcall TForm1::Button2Click(TObject *Sender) { ZOZNAM pole[10];
pole[0].meno = LabeledEdit1->Text; pole[0].priezvisko = LabeledEdit2->Text; pole[0].cislo = (LabeledEdit3->Text.ToInt());
StringGrid1->Cells[2][1] = pole[0].cislo; StringGrid1->Cells[0][1] = pole[0].meno; StringGrid1->Cells[1][1] = pole[0].priezvisko; }
Teraz prejdeme k pointerom a ich funkciám v programov. Pointer – ukazovateľ odkazuje na miesto v pamäti, kde je uložená nejaká premenná. Pointer neobsahuje hodnotu premennej, ale iba adresu v pamäti. Ukazovateľ zaberá 4 bajty a môže ukazovať na všetky možné dátové typy a ich premenné. Deklarácia pointera sa robí pomocou operátora *. Pointery sa najčastejšie používajú k dynamickej alokácii pamäte pri dynamických premenných.
void __fastcall TForm1::Button3Click(TObject *Sender) { ZOZNAM *pole; pole = new ZOZNAM[10];
(pole + 0)->meno = LabeledEdit1->Text; (pole + 0)->priezvysko = LabeledEdit2->Text; (pole + 0)->cislo = LabeledEdit3->Text.ToInt();
StringGrid1->Cells[0][1] = (pole + 0)->meno; StringGrid1->Cells[1][1] = (pole + 0)->priezvysko; StringGrid1->Cells[2][1] = (pole + 0)->cislo;
delete pole; }
Zapisovali by sme na neznáme miesto v pamäti, pretože sme nealokovali pamäť pre túto premennú.
int *cislo; *cislo = 150; //nesprávna deklarácia
V budúcom dieli si predstavíme triedu AnsiString, ktorou disponuje C++ Builder a prácu s klasickým poľom znakov. Povieme si o výhodách/nevýhodách oboch postupov pri používaní štruktúry, alebo iných funkcií.
int *cislo;
cislo = new (int); *cislo = 150;
delete (cislo)
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk