Pitane

10 отговора 263 прегледа
#1

Pitane

Imame slednite dwa swyrzani spisyka:

Type P1 = ^T1;
T1 = Record
..........
Next: P1;
End;

Type P2 = ^T2;
T2 = Record
..........
Next: P2;
End;

I slednite dwe primerni overload proceduri:

procedure PR1(Var Ptr: P1); overload;
begin
Ptr:= Null;
end;

procedure PR1(Var Ptr: P2); overload;
begin
Ptr:= Null;
end;

Pitaneto e slednoto : kak moje da se napishe edinna procedura, bez da se opiswa dwa pyti kato overload. Koiato da izwyrshwa opisanata primerna operacia i za dwata tipa ukazatelia. Prosto iskam da razbera, dali moje da se definira niakakyw obobshten ukazatel, kakywto e void * w C++. W segashnoto systoianie, neshtata wyrwiat, no me interesuwa dali ima po-elegaten nachin.

10x predwaritelno

[линк]
Отговор
в отговор на FrancescoTotti #2

Re: Pitane

procedure Pr(var Ptr:Pointer);
begin
Ptr := nil;
end;

Отговор
в отговор на Julian #3

Re: Pitane

Mislish logichno ! Obache towa beshe 1-to neshto koeto probwah, obache mi dawa greshka pri kompilacia pri izwikwaneto na funkciata:

"Types of actual and formal var parameters must be identical"

[линк]
Отговор
в отговор на FrancescoTotti #4

Re: Pitane

M/u drugoto ogledah deklaraciite na funkciite koito borawiat s promenliwi ot Pointer tip, naprimer kato: new. Deklaraciata na tazi funkcia ot helpa e slednata:

procedure New(var P: Pointer);

Pri neia e wyzmojen da byde podawan wsiakakyw pointerow tip kato parametyr pri izwikwaneto. Obache wyw samite sorsowe na Delphi e napisana na asembler ! Wsyshtnost kakto i drugite koito razgledah, kato GetMem FreeMem i t.n. Taka che ne mojah da se orientiram tochno po kakyw nachin da podam parametyra pri izwikwaneto !

[линк]
Отговор
в отговор на FrancescoTotti #6

Re: Pitane

az lichno nishto (e malko de) ne shvashtam
to na takiva vuprosi obiknovenno me e murzel da se opitvam da otgovarqm puk i vse se namirat golemi misliteli deto izpisvat po 10000 reda za edin problem
sujalqvam no ne moga da pomogna

neshto ne mojesh li da oprostish malko vuprosa?

by Wise Guy
Отговор
в отговор на FrancescoTotti #7

Re: Pitane

защо ти е да използваш точно такива списъци, това ли е целта на занятието?
кажи какво е заданието, и мога да ти го нагодя с динамични масиви!

Отговор
в отговор на FrancescoTotti #8

Re: Всъщност пробвай това :))

Type P1 = ^T1;
T1 = Record

Next: P1;
End;

Type P2 = ^T2;
T2 = Record

Next: P2;
End;


procedure PR1(Var Ptr: P1);
begin
Ptr:= nil;
end;

var Ptr1:P1;
Ptr2:P2;

Procedure some;
begin
PR1(ptr1);
PR1(P1(ptr2));
end;

Отговор
в отговор на Eмилиo #9

Re: Всъщност пробвай това :))

а може и така

procedure PR1(Var Ptr: Pointer);
begin
Ptr:= nil;
end;

var Ptr1:P1;
Ptr2:P2;

Procedure some;
begin
PR1(Pointer(ptr1));
PR1(Pointer(ptr2));
end;

Отговор
в отговор на Eмилиo #10

Re: Всъщност пробвай това :))

i za da ne se utrepesh ot pisane:

type _p=pointer;
...
...
..
PR1(_p(ptr1));

mojesh da minesh na clasowe - tam moje ama stawa malko po-golqmo w pametta

Отговор