Skip to content

Pointers. Parents of web links

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!