cpp i stos

0

Napisałem procedurkę nastos i zeStosu tak jak się to robi w pascalu ale pojawił się dziwny błąd którego nie rozumiem. Chodzi oczywiśćie oto że wskaźnik żle jest ustawiony.
W procedurce naStos chce aby poprzez zmienną została zwrócona wartość. Jako pierwszy parametr jest wskaźnik i wedle regół powinno być tak że jak zmienie coś na wskaźniku wewnątrz funkcji(procedury) to na zewnątrz będzie to widoczne a tak nie jest. Troche trudno to wytłumaczyć dlatego przesyłąm pełny kod.

include
int abc;

struct TDane
{ int liczba;
char *tekst;};

struct TPojemnik
{ TDane dane;
TPojemnik *wsk; };

TPojemnik *naStos(TPojemnik *p, TDane d)
{ p=new TPojemnik;
p->dane=d;
p->wsk=(p--);
p++;
return p; // wlasne obejscie problemu
};

TPojemnik *zeStosu(TPojemnik *p, TDane &d)
{
TPojemnik *rob;
rob=p;
d=p->dane;
p--;
delete rob;
return p; // wlasne obejscie problemu
}

main()
{
TPojemnik *adres,*a2;
TDane d;
d.liczba=1;
a2=naStos(adres,d);
d.liczba=2;
a2=naStos(adres,d);
cout!!

0

Chyba się udało. Oto kod dla zainteresowanych(ale nie testowałem go dokładnie :) ).
#include
int abc;

struct TDane // def danych
{
int liczba;
/* .... */
};

struct TPojemnik // def klocka stosu
{
TDane dane;
TPojemnik *wsk;
};

TPojemnik *naStos(TPojemnik *p, TDane d)
{
TPojemnik *rob=new TPojemnik;;
rob->dane=d; // ustaw dane
rob->wsk=p; // ustaw wskaznik na nowy klocku
return rob; // oddaje dane funkcji
};

TPojemnik *zeStosu(TPojemnik *p, TDane &d)
{
if (p) // pNULL
{ TPojemnik *rob=p; // zapamietaj wskaznik
d=p->dane; // odczytaj dane
p=p->wsk; // ustaw wskaznik na poprzednim klocku
delete rob; // usun klocek (kom. ze stosu)
}
return p;
}

main()
{

TPojemnik *adres=NULL;
TDane d;

d.liczba=1; adres=naStos(adres,d); // ustaw dane i na stos
d.liczba=2; adres=naStos(adres,d);
adres=zeStosu(adres,d); cout

1 użytkowników online, w tym zalogowanych: 0, gości: 1