| 1. | 
Pointers in C++ can be assigned to NULL values. | 
References in C++ can never be NULL else; it will throw an exception. | 
| 2. | 
To dereference a variable in the case of pointers, (*) operator is used | 
There is no need for referencing the variable; the variable name is simply used in case of reference in C++. | 
| 3. | 
Pointers allow multiple levels of indirection, which  means that pointer to pointer to pointer assigning and targeting is  possible. For example: int *ptr, int **ptr1; int x= 10; int y= 20; ptr = &x; ptr1 = &ptr; | 
No multiple levels of indirection are possible in the  case of references. Only a single level is applicable in references.  Implementing multiple levels in references in C++ throws a compiler  error to the user. For example, int a = 13; int &ref = a; int &&ref1 = ref; | 
| 4. | 
A pointer can be reassigned to point to another variable. But the variable needs to be of the same type of variable. For example: int *p; Int x, y; p = &x; p = &y; | 
Once the variable is referred to by the reference variable, it cannot be reassigned to refer to another variable. | 
| 5. | 
All the arithmetic operations like addition,  subtraction, increment, etc., are possible in the case of pointers in  C++. This is known as Pointer arithmetic. For example: int arr [5] = {10, 20, 30, 40, 50}; int p = arr; for (int i =0; i<5; i++) { cout << *p << endl; p++; } | 
Arithmetic operations are not possible in the case of  references. In C++, it will throw a compiler time error when it tries to do so. For example: int x = 10; int &ref = x; cout << ref++ << endl; | 
| 6. | 
In the case of declaring a pointer in a C++ program, (*) operator is used before the pointer name. For example: int *ptr; | 
In the case of reference, the reference variable is  declared by using the (&) operator before the reference variable,  which stands for the address. For example: Int a= 10; int &ref = a; | 
| 7. | 
The pointer variable returns the value whose address it is pointing to. Value can be retrieved using the (*) operator. | 
The reference variable returns the address of the  address it is referring to. The address can be retrieved using the  (&) operator. | 
| 8. | 
The pointer variable in C++ has its own address in computer memory, and it also occupies space in the stack. | 
The reference variable does not have its own memory  address; instead, it only points to the variable and shares the same  address as the original variable. |