Here the code
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, StdCtrls; // FileUtil, Graphics, Dialogs, type mypinteger = ^integer; // int* x in c++ type { TForm1 } TForm1 = class(TForm) ButtonByValue: TButton; ButtonByReference: TButton; ButtonByPointer: TButton; Memo: TMemo; procedure ButtonByPointerClick(Sender: TObject); procedure ButtonByReferenceClick(Sender: TObject); procedure ButtonByValueClick(Sender: TObject); private { private declarations } procedure SquareByValue(x: integer); procedure SquareByReference(var x: integer); // int& x in c++ procedure SquareByPointer(x: pinteger); // int* x in c++ //procedure SquareByPointer2(x: ^integer); // int* x in c++ public { public declarations } end; var Form1: TForm1; implementation procedure Tform1.SquareByValue(x: integer); begin x := x * x; Memo.Lines.Add('Local variable x using byvalue =' + inttostr(x)); end; procedure Tform1.SquareByReference(var x: integer); // int& x in c++ begin x := x * x; // values !!! Memo.Lines.Add('Local variable x using byreference =' + inttostr(x)); end; procedure Tform1.SquareByPointer(x: pinteger); // int* x in c++ begin x^ := x^ * x^; //dereference (*x in c++) Memo.Lines.Add('Local variable x using by pointer =' + inttostr(x^)); end; { TForm1 } //main program // working with pointers // @x gives the address (&x in c++) // ^x gives the value (*x in c++) procedure TForm1.ButtonByValueClick(Sender: TObject); var x:integer; begin Memo.Clear; x:=2; Memo.Lines.Add('initial value x =' + inttostr(x)); SquareByValue(x); Memo.Lines.Add('after the square call function the value of x =' + inttostr(x)); end; procedure TForm1.ButtonByReferenceClick(Sender: TObject); var x:integer; begin Memo.Clear; x:=2; Memo.Lines.Add('initial value x =' + inttostr(x)); SquareByReference(x); Memo.Lines.Add('after the square call function the value of x =' + inttostr(x)); end; procedure TForm1.ButtonByPointerClick(Sender: TObject); var x:integer; begin Memo.Clear; x:=3; Memo.Lines.Add('initial value x =' + inttostr(x)); SquareByPointer(@x); // @x becomes &x in c++ Memo.Lines.Add('after the square call function the value of x =' + inttostr(x)); end; initialization {$I unit1.lrs} end.
That's all for now!
See you on next article!