Danes bomo najprej videli kako vam gre od
Danes bomo najprej videli, kako vam gre od rok reševanje križank … 1. Kako še rečemo predprocesorskemu ukazu, ki se začne z znakom # v prvem stolpcu 2. Kateri realni podatkovni tip ustreza formatu enojne natančnosti 1 3. Kateri podatkovni tip za predstavitev znakov uporablja ASCII kodo 2 3 4. Katero ključno besedo uporabljamo za deklaracijo znakovne spremenljivke 4 5 6 5. Kateri podatkovni tip ima na zalogi le dve logični vrednosti 6. S katero ključno besedo definiramo naštevni podatkovni tip 7. S katerim določilom določimo, da ima spremenljivka konstantno vrednost 7
1. Kako še rečemo predprocesorskemu ukazu, ki se začne z znakom # v prvem stolpcu 2. Kateri realni podatkovni tip ustreza formatu enojne natančnosti 1 3. Kateri podatkovni tip za predstavitev znakov uporablja ASCII kodo D I R E K T 2 3 4. Katero ključno besedo uporabljamo za deklaracijo znakovne spremenljivke 4 5 6 5. Kateri podatkovni tip ima na zalogi le dve logični vrednosti 6. S katero ključno besedo definiramo naštevni podatkovni tip 7. S katerim določilom določimo, da ima spremenljivka konstantno vrednost 7 I V A
1. Kako še rečemo predprocesorskemu ukazu, ki se začne z znakom # v prvem stolpcu 2. Kateri realni podatkovni tip ustreza formatu enojne natančnosti 1 3. Kateri podatkovni tip za predstavitev znakov uporablja ASCII kodo D I 2 R E K T F L O A T 3 4. Katero ključno besedo uporabljamo za deklaracijo znakovne spremenljivke 4 5 6 5. Kateri podatkovni tip ima na zalogi le dve logični vrednosti 6. S katero ključno besedo definiramo naštevni podatkovni tip 7. S katerim določilom določimo, da ima spremenljivka konstantno vrednost 7 I V A
1. Kako še rečemo predprocesorskemu ukazu, ki se začne z znakom # v prvem stolpcu 2. Kateri realni podatkovni tip ustreza formatu enojne natančnosti 1 3. Kateri podatkovni tip za predstavitev znakov uporablja ASCII kodo D I 2 R E K T 5. Kateri podatkovni tip ima na zalogi le dve logični vrednosti 6. S katero ključno besedo definiramo naštevni podatkovni tip 7. S katerim določilom določimo, da ima spremenljivka konstantno vrednost V A F L O A T 3 4. Katero ključno besedo uporabljamo za deklaracijo znakovne spremenljivke I 4 5 6 7 Z N A K O V N I
1. Kako še rečemo predprocesorskemu ukazu, ki se začne z znakom # v prvem stolpcu 2. Kateri realni podatkovni tip ustreza formatu enojne natančnosti 1 3. Kateri podatkovni tip za predstavitev znakov uporablja ASCII kodo D I 2 R E K T 4 6. S katero ključno besedo definiramo naštevni podatkovni tip 7. S katerim določilom določimo, da ima spremenljivka konstantno vrednost Z N A K O V N C H A R 5 6 5. Kateri podatkovni tip ima na zalogi le dve logični vrednosti V A F L O A T 3 4. Katero ključno besedo uporabljamo za deklaracijo znakovne spremenljivke I 7 I
1. Kako še rečemo predprocesorskemu ukazu, ki se začne z znakom # v prvem stolpcu 2. Kateri realni podatkovni tip ustreza formatu enojne natančnosti 1 3. Kateri podatkovni tip za predstavitev znakov uporablja ASCII kodo D I 2 R E K T 6. S katero ključno besedo definiramo naštevni podatkovni tip 7. S katerim določilom določimo, da ima spremenljivka konstantno vrednost Z N A K O V N 4 C H A R 5 6 5. Kateri podatkovni tip ima na zalogi le dve logični vrednosti V A F L O A T 3 4. Katero ključno besedo uporabljamo za deklaracijo znakovne spremenljivke I 7 L O G I Č N I I
1. Kako še rečemo predprocesorskemu ukazu, ki se začne z znakom # v prvem stolpcu 2. Kateri realni podatkovni tip ustreza formatu enojne natančnosti 1 3. Kateri podatkovni tip za predstavitev znakov uporablja ASCII kodo D I 2 R E K T V A F L O A T 3 4. Katero ključno besedo uporabljamo za deklaracijo znakovne spremenljivke I Z N A K O V N 4 C H A R 5 6 L O G I E N U M 5. Kateri podatkovni tip ima na zalogi le dve logični vrednosti 6. S katero ključno besedo definiramo naštevni podatkovni tip 7. S katerim določilom določimo, da ima spremenljivka konstantno vrednost 7 Č N I I
1. Kako še rečemo predprocesorskemu ukazu, ki se začne z znakom # v prvem stolpcu geslo 2. Kateri realni podatkovni tip ustreza formatu enojne natančnosti 1 3. Kateri podatkovni tip za predstavitev znakov uporablja ASCII kodo D I 2 R E K T V A F L O A T 3 4. Katero ključno besedo uporabljamo za deklaracijo znakovne spremenljivke I Z N A K O V N 4 C H A R 5 L O G I Č N 6 E N U M 5. Kateri podatkovni tip ima na zalogi le dve logični vrednosti 6. S katero ključno besedo definiramo naštevni podatkovni tip 7. S katerim določilom določimo, da ima spremenljivka konstantno vrednost 7 C O N S T I I
PODATKOVNI TIPI V JEZIKU C++ Osnovni podatkovni tipi Sestavljeni podatkovni tipi Celoštevilčni: Izpeljani: - int (zasede 4 zloge) - kazalci (4 zloge) - short (2 zloga) - reference - long (4 zloge) Znakovni: - char (1 zlog) Homogeni: - polja Nehomogeni: Realni: - strukture - float (4 zloge) - unije - double (8 zlogov) - long double (8 zlogov) Naštevni: - enum (4 zloge) Logični: - bool (1 zlog)
PODATKOVNI TIPI V JEZIKU C++ Osnovni podatkovni tipi Sestavljeni podatkovni tipi Celoštevilčni: Izpeljani: - int (zasede 4 zloge) - kazalci (4 zloge) - short (2 zloga) - reference - long (4 zloge) Znakovni: - char (1 zlog) Homogeni: - polja Nehomogeni: Realni: - strukture - float (4 zloge) - unije - double (8 zlogov) - long double (8 zlogov) Naštevni: - enum (4 zloge) Logični: - bool (1 zlog)
KAZALCI Ko deklariramo neko spremenljivko, navedemo njen podatkovni tip in ime, npr: POMNILNIK Fizični naslovi int podatek; double pi; char znak; Zaslon Vsebina Logični naslovi
KAZALCI Ko deklariramo neko spremenljivko, navedemo njen podatkovni tip in ime, npr: POMNILNIK Fizični naslovi Vsebina Logični naslovi int podatek; double pi; char znak; Ko operacijski sistem izvrši deklaracijski stavek, v pomnilniku rezervira prostor za deklarirani podatkovni objekt ter mu dodeli logični naslov, ki je enak imenu spremenljivke. Koliko prostora bo rezerviral za katero spremenljivko, pa je odvisno od njenega podatkovnega tipa. 0 x 0012 FF 88 podatek 0 x 0012 FF 80 pi 0 x 0012 FF 7 F znak Zaslon
KAZALCI Ko deklariramo neko spremenljivko, navedemo njen podatkovni tip in ime, npr: POMNILNIK Fizični naslovi Vsebina Logični naslovi int podatek; double pi; char znak; Ko operacijski sistem izvrši deklaracijski stavek, v pomnilniku rezervira prostor za deklarirani podatkovni objekt ter mu dodeli logični naslov, ki je enak imenu spremenljivke. Koliko prostora bo rezerviral za katero spremenljivko, pa je odvisno od njenega podatkovnega tipa. 0 x 0012 FF 88 podatek 0 x 0012 FF 80 pi 0 x 0012 FF 7 F znak Če bi sedaj hoteli v prvo deklarirano spremenljivko zapisati kak celoštevilčni podatek, bi to storili s prireditvenim stavkom, npr: podatek = 123; Zaslon
KAZALCI Ko deklariramo neko spremenljivko, navedemo njen podatkovni tip in ime, npr: POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 123 Logični naslovi int podatek; double pi; char znak; Ko operacijski sistem izvrši deklaracijski stavek, v pomnilniku rezervira prostor za deklarirani podatkovni objekt ter mu dodeli logični naslov, ki je enak imenu spremenljivke. Koliko prostora bo rezerviral za katero spremenljivko, pa je odvisno od njenega podatkovnega tipa. 0 x 0012 FF 80 pi 0 x 0012 FF 7 F znak Če bi sedaj hoteli v prvo deklarirano spremenljivko zapisati kak celoštevilčni podatek, bi to storili s prireditvenim stavkom, npr: podatek = 123; V podatkovni objekt smo torej zapisali vrednost 123, pri čemer smo do tega objekta dostopali preko njegovega logičnega naslova podatek. Vendar iz slike vidimo, da je ta podatkovni objekt določen tudi s fizičnim naslovom. Sprašujemo se torej, ali lahko do vsebine nekega objekta pridemo tudi preko njegovega fizičnega naslova. podatek Zaslon
KAZALCI Odgovor je DA. Do vsebine deklarirane spremenljivke lahko dostopamo preko logičnega naslova ali preko njenega fizičnega naslova POMNILNIK Fizični naslovi Orodje, ki nam to omogoča, so kazalci. Kazalec je podatkovni tip, to pa pomeni, da zasede določeni prostor v pomnilniku, da ima določeno zalogo vrednosti in da določa dovoljene operacije nad vrednostmi, ki jih vsebuje. Deklarirana spremenljivka kazalčnega tipa: - v pomnilniku zasede 4 zloge, - lahko vsebuje samo fizične naslove pomnilniških lokacij ter - dovoljuje le aritmetične operacije prištevanja in odštevanja celih števil. Zaslon Vsebina Logični naslovi
KAZALCI Deklaracijo kazalca opravimo tako, da najprej zapišemo podatkovni tip objekta, na katerega bo kazalec kazal, nato zapišemo *, ki prevajalniku pove, da gre za spremenljivko kazalčnega tipa in na koncu še zapišemo ime kazalca. Npr: POMNILNIK Fizični naslovi double stevilo = 101. 9; double * kd_stevilo; Zaslon Vsebina Logični naslovi
KAZALCI Deklaracijo kazalca opravimo tako, da najprej zapišemo podatkovni tip objekta, na katerega bo kazalec kazal, nato zapišemo *, ki prevajalniku pove, da gre za spremenljivko kazalčnega tipa in na koncu še zapišemo ime kazalca. Npr: POMNILNIK Fizični naslovi Vsebina 0 x 0012 AF 2 F 101. 9 Logični naslovi stevilo double stevilo = 101. 9; double * kd_stevilo; 0 x 0012 AF 27 Zaslon kd_stevilo
KAZALCI Deklaracijo kazalca opravimo tako, da najprej zapišemo podatkovni tip objekta, na katerega bo kazalec kazal, nato zapišemo *, ki prevajalniku pove, da gre za spremenljivko kazalčnega tipa in na koncu še zapišemo ime kazalca. Npr: POMNILNIK Fizični naslovi Vsebina 0 x 0012 AF 2 F 101. 9 Logični naslovi stevilo double stevilo = 101. 9; double * kd_stevilo; Kazalcu vrednost, ki je fizični naslov deklariranega podatkovnega objekta, priredimo tako, da pred logičnim naslovom objekta zapišemo referenčni operator &, torej: 0 x 0012 AF 27 kd_stevilo = &stevilo; Zaslon kd_stevilo
KAZALCI Deklaracijo kazalca opravimo tako, da najprej zapišemo podatkovni tip objekta, na katerega bo kazalec kazal, nato zapišemo *, ki prevajalniku pove, da gre za spremenljivko kazalčnega tipa in na koncu še zapišemo ime kazalca. Npr: POMNILNIK Fizični naslovi Vsebina 0 x 0012 AF 2 F 101. 9 0 x 0012 AF 27 0 x 0012 AF 2 F Logični naslovi stevilo double stevilo = 101. 9; double * kd_stevilo; Kazalcu vrednost, ki je fizični naslov deklariranega podatkovnega objekta, priredimo tako, da pred logičnim naslovom objekta zapišemo referenčni operator &, torej: kd_stevilo = &stevilo; Sedaj kazalec kd_stevilo kaže na objekt s fizičnim naslovom 0 x 0012 AF 2 F. Zaslon kd_stevilo
KAZALCI Deklaracijo kazalca opravimo tako, da najprej zapišemo podatkovni tip objekta, na katerega bo kazalec kazal, nato zapišemo *, ki prevajalniku pove, da gre za spremenljivko kazalčnega tipa in na koncu še zapišemo ime kazalca. Npr: POMNILNIK Fizični naslovi Vsebina 0 x 0012 AF 2 F 101. 9 0 x 0012 AF 27 0 x 0012 AF 2 F Logični naslovi stevilo double stevilo = 101. 9; double * kd_stevilo; Kazalcu vrednost, ki je fizični naslov deklariranega podatkovnega objekta, priredimo tako, da pred logičnim naslovom objekta zapišemo referenčni operator &, torej: kd_stevilo = &stevilo; Sedaj kazalec kd_stevilo kaže na objekt s fizičnim naslovom 0 x 0012 AF 2 F. Do vsebine objekta na katerega kaže kazalec pridemo z dereferenciranjem kazalca, to pa storimo tako, da pred imenom kazalca zapišemo dereferenčni operator *, npr: *kd_stevilo = 33. 1; Zaslon kd_stevilo
KAZALCI Deklaracijo kazalca opravimo tako, da najprej zapišemo podatkovni tip objekta, na katerega bo kazalec kazal, nato zapišemo *, ki prevajalniku pove, da gre za spremenljivko kazalčnega tipa in na koncu še zapišemo ime kazalca. Npr: POMNILNIK Fizični naslovi Vsebina 0 x 0012 AF 2 F 33. 1 0 x 0012 AF 27 0 x 0012 AF 2 F Logični naslovi stevilo double stevilo = 101. 9; double * kd_stevilo; Kazalcu vrednost, ki je fizični naslov deklariranega podatkovnega objekta, priredimo tako, da pred logičnim naslovom objekta zapišemo referenčni operator &, torej: kd_stevilo = &stevilo; Sedaj kazalec kd_stevilo kaže na objekt s fizičnim naslovom 0 x 0012 AF 2 F. Do vsebine objekta na katerega kaže kazalec pridemo z dereferenciranjem kazalca, to pa storimo tako, da pred imenom kazalca zapišemo dereferenčni operator *, npr: *kd_stevilo = 33. 1; Zaslon kd_stevilo
KAZALCI kazalec – podatkovni tip Deklarirana spremenljivka kazalčnega tipa: - v pomnilniku zasede 4 zloge, - lahko vsebuje samo fizične naslove pomnilniških lokacij - ter dovoljuje le aritmetične operacije prištevanja in odštevanja celih števil. POMNILNIK Fizični naslovi deklaracija in inicializacija kazalca Deklaracijo opravimo tako, da najprej zapišemo podatkovni tip objekta, na katerega bo kazalec kazal, nato zapišemo *, ki prevajalniku pove, da gre za spremenljivko kazalčnega tipa in na koncu še zapišemo ime kazalca. Kazalcu vrednost, ki je fizični naslov deklariranega podatkovnega objekta, priredimo tako, da pred logičnim naslovom objekta zapišemo referenčni operator &, Npr: int podatek = 236; int * ki_podatek = &podatek; dereferenciranje Do vsebine objekta na katerega kaže kazalec dostopamo tako, da pred imenom kazalca zapišemo dereferenčni operator *, npr: *ki_podatek = 63; Zaslon Vsebina Logični naslovi
KAZALCI Za vajo bomo analizirali program, ki sešteje dve števili ter izpiše njuno vsoto na zaslon. V programu so za dostop do vrednosti spremenljivk uporabljeni kazalci. POMNILNIK Fizični naslovi Zaslon Vsebina Logični naslovi
KAZALCI #include<iostream. h> int main() { float vsota, stevilo 1 = 101, stevilo 2 = 202; float * kf_vsota = &vsota; float * kf_stevilo 1 = &stevilo 1; float * kf_stevilo 2 = &stevilo 2; POMNILNIK Fizični naslovi *kf_vsota = *kf_stevilo 1 + *kf_stevilo 2; cout<<“Vsota je: “<<vsota<<endl; return 0; } Poglejmo si, kako se bo ta program izvajal. Zaslon Vsebina Logični naslovi
KAZALCI #include<iostream. h> int main() { float vsota, stevilo 1 = 101, stevilo 2 = 202; float * kf_vsota = &vsota; float * kf_stevilo 1 = &stevilo 1; float * kf_stevilo 2 = &stevilo 2; POMNILNIK Fizični naslovi *kf_vsota = *kf_stevilo 1 + *kf_stevilo 2; cout<<“Vsota je: “<<vsota<<endl; return 0; } Zaslon Vsebina Logični naslovi
KAZALCI #include<iostream. h> int main() { float vsota, stevilo 1 = 101, stevilo 2 = 202; float * kf_vsota = &vsota; float * kf_stevilo 1 = &stevilo 1; float * kf_stevilo 2 = &stevilo 2; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 Logični naslovi vsota 0 x 0012 FF 84 101 stevilo 1 0 x 0012 FF 80 202 stevilo 2 *kf_vsota = *kf_stevilo 1 + *kf_stevilo 2; cout<<“Vsota je: “<<vsota<<endl; return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { float vsota, stevilo 1 = 101, stevilo 2 = 202; float * kf_vsota = &vsota; float * kf_stevilo 1 = &stevilo 1; float * kf_stevilo 2 = &stevilo 2; *kf_vsota = *kf_stevilo 1 + *kf_stevilo 2; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 Logični naslovi vsota 0 x 0012 FF 84 101 stevilo 1 0 x 0012 FF 80 202 stevilo 2 0 x 0012 AF 7 C 0 x 0012 FF 88 kf_vsota cout<<“Vsota je: “<<vsota<<endl; return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { float vsota, stevilo 1 = 101, stevilo 2 = 202; float * kf_vsota = &vsota; float * kf_stevilo 1 = &stevilo 1; float * kf_stevilo 2 = &stevilo 2; *kf_vsota = *kf_stevilo 1 + *kf_stevilo 2; cout<<“Vsota je: “<<vsota<<endl; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 Logični naslovi vsota 0 x 0012 FF 84 101 stevilo 1 0 x 0012 FF 80 202 stevilo 2 0 x 0012 AF 7 C 0 x 0012 FF 88 kf_vsota 0 x 0012 AF 78 0 x 0012 FF 84 kf_stevilo 1 return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { float vsota, stevilo 1 = 101, stevilo 2 = 202; float * kf_vsota = &vsota; float * kf_stevilo 1 = &stevilo 1; float * kf_stevilo 2 = &stevilo 2; *kf_vsota = *kf_stevilo 1 + *kf_stevilo 2; cout<<“Vsota je: “<<vsota<<endl; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 Logični naslovi vsota 0 x 0012 FF 84 101 stevilo 1 0 x 0012 FF 80 202 stevilo 2 0 x 0012 AF 7 C 0 x 0012 FF 88 kf_vsota 0 x 0012 AF 78 0 x 0012 FF 84 kf_stevilo 1 0 x 0012 AF 74 0 x 0012 FF 80 kf_stevilo 2 return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { float vsota, stevilo 1 = 101, stevilo 2 = 202; float * kf_vsota = &vsota; float * kf_stevilo 1 = &stevilo 1; float * kf_stevilo 2 = &stevilo 2; *kf_vsota = *kf_stevilo 1 + *kf_stevilo 2; cout<<“Vsota je: “<<vsota<<endl; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 303 vsota 0 x 0012 FF 84 101 stevilo 1 0 x 0012 FF 80 202 stevilo 2 0 x 0012 AF 7 C 0 x 0012 FF 88 kf_vsota 0 x 0012 AF 78 0 x 0012 FF 84 kf_stevilo 1 0 x 0012 AF 74 0 x 0012 FF 80 kf_stevilo 2 return 0; } Zaslon Logični naslovi
KAZALCI #include<iostream. h> int main() { float vsota, stevilo 1 = 101, stevilo 2 = 202; float * kf_vsota = &vsota; float * kf_stevilo 1 = &stevilo 1; float * kf_stevilo 2 = &stevilo 2; *kf_vsota = *kf_stevilo 1 + *kf_stevilo 2; cout<<“Vsota je: “<<vsota<<endl; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 303 vsota 0 x 0012 FF 84 101 stevilo 1 0 x 0012 FF 80 202 stevilo 2 0 x 0012 AF 7 C 0 x 0012 FF 88 kf_vsota 0 x 0012 AF 78 0 x 0012 FF 84 kf_stevilo 1 0 x 0012 AF 74 0 x 0012 FF 80 kf_stevilo 2 return 0; } Zaslon Vsota je: 303 Logični naslovi
KAZALCI Sedaj pa bomo vsi skupaj napisali program, ki na osnovi podatka o dolžini stranice kvadrata izračuna in izpiše njegov obseg in ploščino. Za dostop do vrednosti spremenljivk bomo spet uporabljali kazalce. POMNILNIK Fizični naslovi Zaslon Vsebina Logični naslovi
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; POMNILNIK Fizični naslovi return 0; } Zaslon Vsebina Logični naslovi
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 Logični naslovi stranica 0 x 0012 FF 80 obseg 0 x 0012 FF 78 ploscina return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 Logični naslovi stranica 0 x 0012 FF 80 obseg 0 x 0012 FF 78 ploscina return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 Logični naslovi stranica 0 x 0012 FF 80 obseg 0 x 0012 FF 78 ploscina 0 x 0012 AF 74 return 0; } Zaslon 0 x 0012 FF 88 kd_stranica
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 Logični naslovi stranica 0 x 0012 FF 80 obseg 0 x 0012 FF 78 ploscina 0 x 0012 AF 74 return 0; } Zaslon 0 x 0012 FF 88 kd_stranica
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 Logični naslovi stranica 0 x 0012 FF 80 obseg 0 x 0012 FF 78 ploscina 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 Logični naslovi stranica 0 x 0012 FF 80 obseg 0 x 0012 FF 78 ploscina 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 Logični naslovi stranica 0 x 0012 FF 80 obseg 0 x 0012 FF 78 ploscina 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg 0 x 0012 AF 6 C 0 x 0012 FF 78 kd_ploscina return 0; } Zaslon
KAZALCI POMNILNIK Vsebina #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; *kd_obseg = 4 * (*kd_stranica); 0 x 0012 FF 88 5. 0 Logični naslovi stranica 0 x 0012 FF 80 obseg 0 x 0012 FF 78 ploscina 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg 0 x 0012 AF 6 C 0 x 0012 FF 78 kd_ploscina return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; *kd_obseg = 4 * (*kd_stranica); POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 stranica 0 x 0012 FF 80 20. 0 obseg 0 x 0012 FF 78 Logični naslovi ploscina 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg 0 x 0012 AF 6 C 0 x 0012 FF 78 kd_ploscina return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; *kd_obseg = 4 * (*kd_stranica); *kd_ploscina = *kd_stranica * (*kd_stranica); POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 stranica 0 x 0012 FF 80 20. 0 obseg 0 x 0012 FF 78 Logični naslovi ploscina 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg 0 x 0012 AF 6 C 0 x 0012 FF 78 kd_ploscina return 0; } Zaslon
KAZALCI #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; *kd_obseg = 4 * (*kd_stranica); *kd_ploscina = *kd_stranica * (*kd_stranica); POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 stranica 0 x 0012 FF 80 20. 0 obseg 0 x 0012 FF 78 25. 0 ploscina 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg 0 x 0012 AF 6 C 0 x 0012 FF 78 kd_ploscina return 0; } Zaslon Logični naslovi
KAZALCI POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 stranica 0 x 0012 FF 80 20. 0 obseg 0 x 0012 FF 78 25. 0 ploscina *kd_obseg = 4 * (*kd_stranica); *kd_ploscina = *kd_stranica * (*kd_stranica); 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg cout<<“Obseg kvadrata je: “<<obseg<<endl; 0 x 0012 AF 6 C 0 x 0012 FF 78 kd_ploscina #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; return 0; } Zaslon Logični naslovi
KAZALCI POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 stranica 0 x 0012 FF 80 20. 0 obseg 0 x 0012 FF 78 25. 0 ploscina *kd_obseg = 4 * (*kd_stranica); *kd_ploscina = *kd_stranica * (*kd_stranica); 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg cout<<“Obseg kvadrata je: “<<obseg<<endl; 0 x 0012 AF 6 C 0 x 0012 FF 78 kd_ploscina #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; return 0; } Zaslon Obseg kvadrata je: 20 Logični naslovi
KAZALCI POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 stranica 0 x 0012 FF 80 20. 0 obseg 0 x 0012 FF 78 25. 0 ploscina *kd_obseg = 4 * (*kd_stranica); *kd_ploscina = *kd_stranica * (*kd_stranica); 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg cout<<“Obseg kvadrata je: “<<obseg<<endl; cout<<“Ploscina kvadrata je: “<<ploscina<<endl; 0 x 0012 AF 6 C 0 x 0012 FF 78 kd_ploscina #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; return 0; } Zaslon Obseg kvadrata je: 20 Logični naslovi
KAZALCI POMNILNIK Fizični naslovi Vsebina 0 x 0012 FF 88 5. 0 stranica 0 x 0012 FF 80 20. 0 obseg 0 x 0012 FF 78 25. 0 ploscina *kd_obseg = 4 * (*kd_stranica); *kd_ploscina = *kd_stranica * (*kd_stranica); 0 x 0012 AF 74 0 x 0012 FF 88 kd_stranica 0 x 0012 AF 70 0 x 0012 FF 80 kd_obseg cout<<“Obseg kvadrata je: “<<obseg<<endl; cout<<“Ploscina kvadrata je: “<<ploscina<<endl; 0 x 0012 AF 6 C 0 x 0012 FF 78 kd_ploscina #include<iostream. h> int main() { double stranica = 5. 0, obseg, ploscina; double * kd_stranica = &stranica; double * kd_obseg = &obseg; double * kd_ploscina = &ploscina; return 0; } Zaslon Obseg kvadrata je: 20 Ploscina kvadrata je: 25 Logični naslovi
KAZALCI Seveda se lahko vprašamo, zakaj sploh potrebujemo kazalce, saj operacijski sistem z izvršitvijo deklaracijskega stavka določi logični naslov vsakemu deklariranemu podatkovnemu objektu. POMNILNIK Fizični naslovi Vendar ni vedno tako!!! V primeru deklaracije statičnih spremenljivk operacijski sistem res določi logične naslove, v primeru dinamičnega zaseganja pomnilnika pa ne. Torej nam za dostopanje do podatkovnih objektov, deklariranih na dinamični način, ostane le možnost dostopanja preko fizičnih naslovov oziroma kazalcev. O dinamičnem zaseganju pomnilnika in uporabi kazalcev pa več prihodnjič. Do takrat pa prosim, da doma poskusite rešiti naloge, ki sem vam jih razdelil in da si v knjigi Uvod v programiranje in programski jezik C++ na strani 154 preberete poglavje, ki govori o Dinamičnem dodeljevanju pomnilnika. Naslednjič sledi tudi predstavitev seminarske naloge z naslovom Kazalec – na poti v resnično programiranje. Zato prosim dijaka (), ki si je izbral ta naslov, da se pripravi za nastop. Zaslon Vsebina Logični naslovi
- Slides: 49