A Reference is a distinct concept in C/C++ languages. The next code sample (MinGW GCC compiler was used)
#include <iostream>
int main()
{
int Value;
int &ValueRef = Value;
Value = 2;
std::cout << "Value: " << Value << "\n";
std::cout << "ValueRef: " << ValueRef << "\n";
ValueRef = 3;
std::cout << "Value: " << Value << "\n";
std::cout << "ValueRef: " << ValueRef << "\n";
return 0;
}
declares ValueRef as a reference to Value variable. The output is

Though ValueRef variable is a pointer to Value internally the indirection operator is never used, and the syntax for accessing Value directly or indirectly via ValueRef is the same. ValueRef is also called an alias to Value; the point that ValueRef variable is a pointer internally is just an implementation detail.
Another important thing about C/C++ references is that they are always initialized. The language syntax enforces that you cannot declare a wild reference.
Pascal does not have the same reference concept. The closest concept is a procedure parameter passed by reference:
program ref;
{$APPTYPE CONSOLE}
var
Value: Integer;
procedure Test(var ValueRef: Integer);
begin
Writeln('ValueRef: ', ValueRef);
ValueRef:= 3;
end;
begin
Value:= 2;
Writeln('Value: ', Value);
Test(Value);
Writeln('Value: ', Value);
Test(Value);
end.
we can see that
- ValueRef does not use indirection operator to access a referenced variable;
- the language syntax enforces that ValueRef is always initialized.
Delphi does not elaborate the reference concept, though there are many built-in types in the language that are ‘transparent pointers’ – objects, interfaces, dynamic arrays, strings. The term reference can be used for example for object variables because the language syntax makes these variables indistinguishable from referenced instances. Instead the term object is usually used, that can mean object reference or object instance, so sometimes you think twice to understand what a particular object does mean.