Home »
C++ programming language
What are References and how it is different from pointers?
Learn: The difference between references [preferably used in C++] and pointers [preferably used in C/C++] and would ultimately help in answering a C++ interview question.
Submitted by Deepak Dutt Mishra, on April 30, 2018
This article consists of the description of both references [in C++] and pointers [preferred in C/C++]. The description would finally lead to a conclusion which will draw a difference line between pointers and reference. This article does not conclude that one of these should not be preferred. It will just simply provide you some basic overview over the topics.
What are References in C++?
A reference variable is basically nothing but an alias name or in simpler terms another name declared for a pre-existing variable. For the purpose of declaring a reference or an alias the address-of (&) is used. This operator placed before the variable in declaration statement. After a reference is declared then that variable can be called by either using the original variable name or the alias name given to that variable using & operator.
In simpler words, let a variable name say int a=10; be a variable declared. This variable is a label marking a memory location. Similarly, when we declared a reference say int &r=a; this is yet another label marking that same memory location so we can access that memory by calling any of these two variable names.
How References are Different from Pointers?
References are similar to pointers or in simpler way of understanding they are weak pointers basically developed for the purpose of is in functions as they act as formal parameters[variables declared inside the function declaration parenthesis] in various functions to support reference passing in functions. When a reference is passed into a function, the function works on the original copy of the variable instead of duplicate values as in value passing functions. This enables us to show the operations performed inside the function in the outside of the function. Also references are used for function arguments and return values.
C++ implementation of References
Consider the below example, here we are implementing references. This is an example of references in C++.
#include <iostream>
using namespace std;
int main() {
int i;
double d;
int &a = i;
double &b = d;
i = 20;
d = 0.97;
cout << "Value of original int variable i:" << i << endl;
cout << "Value of reference int variable a:" << a << endl;
cout << "Value of original double variable d:" << d << endl;
cout << "Value of reference double variable b:" << b << endl;
return 0;
}
Output
Value of original int variable i:20
Value of reference int variable a:20
Value of original double variable d:0.97
Value of reference double variable b:0.97
There are two basic concepts which a C++ programmer should have knowledge on the topic of references:
References as Parameters
This is how a call by reference function works using references.
Example
#include <iostream>
using namespace std;
/* Here &a,&b are references
which are used as formal paramater*/
void swap(int& a, int& b) {
int t;
t = a;
a = b;
b = t;
}
int main() {
// Here x,y are local variables
int x = 100;
int y = 200;
cout << "Initial value of x:" << x << endl;
cout << "Initial value of y:" << y << endl;
// Calling the function swap
swap(x, y);
cout << "Value of x after swapping:" << x << endl;
cout << "Value of y after swapping:" << y << endl;
return 0;
}
Output
Initial value of x:100
Initial value of y:200
Value of x after swapping:200
Value of y after swapping:100
References as Return Values
A C++ program can also return a reference like it returns a pointer.
Example
#include <ctime>
#include <iostream>
using namespace std;
double v[] = {11.5, 20.1, 33.9, 45.6, 50.2};
double &setValue(int i) {
// Returns reference to variable i
return v[i];
}
int main() {
cout << "Initial values of v:" << endl;
for (int i = 0; i < 5; i++) {
cout << "v[" << i << "] =";
cout << v[i] << endl;
}
setValue(2) = 12.9; // Changes 3rd value
setValue(4) = 6.7; // Changes 5th value
cout << "v after change:" << endl;
for (int i = 0; i < 5; i++) {
cout << "v[" << i << "] =";
cout << v[i] << endl;
}
return 0;
}
Output
Initial values of v:
v[0] =11.5
v[1] =20.1
v[2] =33.9
v[3] =45.6
v[4] =50.2
v after change:
v[0] =11.5
v[1] =20.1
v[2] =12.9
v[3] =45.6
v[4] =6.7