» »

Kazalci

Kazalci

upirna ::

Tore, učim se c++ in prišel sem do kazalcev. Prebral sem si teorijo, pogledal par primerov, kakšna je sintaksa pri kazalcih. Sedaj pa iščem vaje iz kazalcev, saj bi njihovo uporabnost spoznal iz prve roke. Ker na prvi pogled vsak reče (isto je bilo pri objektnem programiranju pri PHP), pa saj se da to narediti tudi tako, čeprav se kasneje pokaže pomembna funkcionalnost.

Hvala!
[to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]

NoUse4AName ::

Napiši povezan seznam. Če znaš narediti to, znaš kazalce. Če povezanega seznama ne znaš narediti, ne znaš kazalcev.
Povezan seznam se uporablja v primeru ko potrebuješ shrambo podatkov, vendar se število podatkov spreminja. Torej ne moreš uporabiti polja, ker polju ne moreš spreminjati velikosti.

npr:
struct podatek
{
int neko_stevilo;
char nek_znakec;
podatek* naslednji;
};
Torej struktura podatek, vsebuje kazalec na naslednji podatek. Z pomočjo tega kazalca lahko narediš verigo podatkov, poljubne dolžine - to je povezan seznam. Napiši funkcije za dodajanje podatkov na poljubnem mestu v seznamu in brisanje.
nasvet: ko naredis nov podatek, vedno nastavi kazalec naslednji na null in preden se program konča, se sprehodi skozi vse podatke in jih izbriši z ukazom delete.

ElectricMan ::

int *tmp;   // tmp je kazalec tipa int;
int stevilo;
stevilo = 999;
tmp =@stevilo; // tmp kaže na tip stevilo
printf(*tmp);

upirna ::

Huh. Kar težka naloga. Bom poskusil in upam, da mi bo uspelo, čeprav bo težko ker sem začetnik v c++ imam pa bogate izkušnje iz PHP, ki mi v c++ zelo prav pridejo, predvsem se mi ni treba učiti sintakse.
[to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]

Gundolf ::

ElectricMan, @ je operator iz pascala. Ti si verjetno želel napisati
tmp = &stevilo;
Pa tudi printf ne zna kar sam po sebi intov izpisat (zna pa writeln v pascalu:D)

NoUse4AName ::

Povezan seznam je eden tistih osnovnih primerov, ki bi jih moral vsak programer narediti. Saj se zelo veliko naučiš.

ElectricMan ::

@Gundolf: ja res je.

Že dolgo nisem programiral C/C++. Sem že malo pozabil sintakso.
Sedaj programiram v Delphi-ju.

upirna ::

Uf, sem se zacetnik.Da be bom nove teme odpiral bom vprasal kar tu.

Imam sledečo strukturo:

struct specialiteta{
	string ime;
	string kuhar;
	int *naslednji;

};


In sledečo funkcijo, ki bi morala dodati vrednosti:
void dodajspecialiteto() ){

	
	cout<< "Vpisite ime specialitete:\n";
	cin >> specialiteta.ime;
	cout << "Vpisite ime kuharja, ki jo je pripravil:\n";
	cin >> specialiteta.kuhar;
	cout << "Hvala za sodelovanje!\n";


}

V main pa jo pokličem:
dodajspecialiteto();


Kompajler pa mi javi polno napak. Vem, da tiči napaka v tem, da funkcija "ne vidi" struktute, ampak ne vem kako bi rešil ta problem v sintaksi.

Hvala za pomoč.
[to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]

Zgodovina sprememb…

  • spremenil: upirna ()

NoUse4AName ::

pusti stringe, samo dodatne komplikacije, to je poglavje zase. Daj števila not.
Z tem:
struct neka_struktura
{
//...
};
Ti samo definiras nek tip podatka, kot npr int/float/char. Enako moras narediti spremenljivko tega tipa. Torej:
neka_struktura spremenljivka;
To spremeneljivko lahko narediš globalno, ali pa jo deklariras v int main() metodi in podajaš kot parameter funkcije, torej:
void dodajspecialiteto( neka_struktura& spr ) {...}

ElectricMan ::

struct specialiteta{
	string ime;
	string kuhar;
	specialiteta *naslednji; // napaka ne int ampak kar struct,
 ki kaže na naslednjo struct podatka specialiteta

};


Kot prvo pri kazalcih moraš rezervirati pomilniški prostor tipa podatka specialiteta.

main(){
struct specialiteta *seznam,*tmp;
new(tmp);
tmp->ime = "niz";
tmp->kuhar = "niz2";
tmp->next = seznam;
seznam = tmp; 
// pa tako naprej
}

};

]Fusion[ ::

Ko pa se tega naveličaš pa lahko greš na dvosmerno(trosmerno?) povezan seznam, ki je še bolj uporaben
"I am not an animal! I am a human being! I... am... a man!" - John Merrick

NoUse4AName ::

Očitno še veliko ne veš o c++. Mogoče bi bilo boljše če se malo več naučiš in potem probaš narediti seznam. Saj ni nujno obvladanje kazalcev, za to da razumeš druge predele jezika.

]Fusion[ ::

Pomoje pa je kar uporabno da veš kazalce in je dobro če se jih nauči. Res ne vem na kaki stopnji je samo škodit ne more...
"I am not an animal! I am a human being! I... am... a man!" - John Merrick

NoUse4AName ::

Seveda so uporabni kazalci. Ampak so za nekoga ki komaj začenja velik zalogaj in je mogoče boljše če se jih loti malo kasneje, ko bo bolj udoben v jeziku. Trenutno se vidi, da mu še veliko drugega manjka kot pa samo kazalci, torej se naj najprej tisto nauči, da se ne bo ubadal z milijon stvarmi pri pisanju seznama.

upirna ::

Jap, se strinjam. Se bom kasneje vrnil na to nalogo, ko bom bolje spoznal c++.
[to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++] enosmerno povezan seznam

Oddelek: Programiranje
63698 (1582) 3p
»

enojno povezan seznam -izpis nazaj

Oddelek: Programiranje
243416 (2956) Randomness
»

[C++] Enosmerno povezan seznam

Oddelek: Programiranje
113497 (1679) lebdim
»

[C++] Naloga seznam

Oddelek: Programiranje
223195 (2470) Matic1911
»

[C] Povezani seznami in kazalci

Oddelek: Programiranje
242515 (2082) Good Guy

Več podobnih tem