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!