Einzelnen Beitrag anzeigen

rowkajjh

Registriert seit: 9. Jan 2006
38 Beiträge
 
#1

Parameterübergabe - leichte Verwirrung

  Alt 16. Jan 2006, 17:54
Hallo,

wenn man was nicht ganz versteht, macht man sich ja ein Beispiel
Ich komme mit Proceduren und wann übergebene Parameter verändert werden noch nicht ganz klar. Mein Beispiel:

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,Graphics;

Procedure cbCopy(i : Integer);
begin
  i := 1;
end;

Procedure cbVal(var i : Integer);
begin
  i := 2;
end;

Procedure cbCopyImg(img : TBitmap);
begin
  img.Width := 20;
  img.Height := 20;;
end;

Procedure cbValImg(var img : TBitmap);
begin
  img.Width := 30;
  img.Height := 30;
end;

var
  i : Integer;
  img : TBitmap;
begin
  i := 0;
  writeln(Format('i:%d', [i]));

  cbCopy(i);
  writeln(Format('i:%d', [i]));

  cbVal(i);
  writeln(Format('i:%d', [i]));

  img := TBitmap.Create;
  img.Width := 10;
  img.Height := 10;
  writeln(Format('w:%d h:%d', [img.Width, img.Height]));

  cbCopyImg(img);
  writeln(Format('w:%d h:%d', [img.Width, img.Height]));

  cbValImg(img);
  writeln(Format('w:%d h:%d', [img.Width, img.Height]));

  FreeAndNil(img);
  Readln;
end.
Das 'i' bei cbCopy nicht und bei cbVal verändert wird, ist mir sofort logisch. Aber bei img nicht so. Dieses ist ja nach beiden Proceduren verändert. Liegt das darin, daß img eine Art Zeiger auf ein TBitmap-Objekt ist, und wenn ich einen Zeiger kopiere, dann kann ich natürlich den Inhalt, auf den der Zeiger zeigt, ändern?

Wenn ich den Zeiger selbst in der Procedure umbiegen würde (also auf was anderes zeigen), da würde das Ergebnis bei den beiden Proceduren unterschiedlich aussehen, oder?

Jetzt, wo ich das schriebe, wirds mir langsam klar. Ist meine Erkärung so richtig?

Danke!

Wenn ich was mit
OBJECT i; und i := OBJECT.Create anlege, kann ich das dann in allen Proceduren ändern?
  Mit Zitat antworten Zitat