[ Milan Milosevic @ 22.12.2023. 05:05 ] @
| U ovom primeru mi memo ispisuje 55 umesto 22?
Code:
procedure TForm1.Button6Click(Sender: TObject);
Procedure Test(const tm:TMem);
begin
tm[0]:=55;
end;
var m:TMem;
begin
SetLength(m,1);
m[0]:= 22;
Test(m);
Memo1.Lines.Add(m[0].ToString)
end;
Da li to nove verzije Delphija više ne vode računa o tipu paramatara funkcije? |
[ savkic @ 22.12.2023. 17:31 ] @
Mislim da se const argumenti prenose kao pointeri, dakle ne pravi se kopija TMem, vec se original prenese i zato promeni vrednost, pretpostavljam da ti je TMem neki array.
E sad, zasto const ne spreci promenu vrednosti ne znam, verovatno ima neko podesavanje za to.
[ djoka_l @ 22.12.2023. 18:06 ] @
Const je pointer na Tmem, njega ne možeš da promeniš.
Nisu const članovi niza na koje pokazuje tm
[ Milan Milosevic @ 23.12.2023. 13:25 ] @
Da, sakapirao sam to. Što je po meni bezveze.
Ako nešto odrediš kao konstantno, svi njegovi delovi bi trebali biti konstantni.
Ovo u stvari dokazuje da se ne pravi nova kopija elemenata kad se definišu kao parametri neke funkcije osim ako nisu tipa integer i sl.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.