Pointer and reference maybe same at assembly level. Try an experiment : Code: # include<stdio.h> int main() { int i =90; int *pointer; int &reference = i; // Line 6 pointer = &i; return 0; // Line 8 } compile it to assembly with Microsoft c++ like this : Code: c:\ cl /Fa filename.cpp or with gcc like Code: c:\ gcc -S -masm=intel filename.cpp Open the asm file like c:\ notepad filename.asm Now you can the code of i, pointer, and reference; Code: Line 6 mov DWORD PTR _i$[ebp], 90 ; int i = 90; ; Line 8 lea eax, DWORD PTR _i$[ebp] ; int &reference = i; mov DWORD PTR _reference$[ebp], eax ; Line 9 lea ecx, DWORD PTR _i$[ebp] ; int *pointer mov DWORD PTR _pointer$[ebp], ecx ; pointer = &i; you see the code for pointer is exactly same as reference .
Dawei i am using c++ compiler if you don't believe me see this code Code: #include<iostream> int main() { int i =90; int *pointer; int &reference = i; pointer = &i; return 0; } Code: mov DWORD PTR _i$[ebp], 90 ; int i = 90 lea eax, DWORD PTR _i$[ebp] ; int &reference = i; mov DWORD PTR _reference$[ebp], eax lea ecx, DWORD PTR _i$[ebp] ; pointer = &i; mov DWORD PTR _pointer$[ebp], ecx the code of reference is same as code of pointer.
the pointer is very ueful when the use in the right way otherwise it can be damaged the our memory location.