Different ways of accessing array elements in C++
Last Updated :
13 Apr, 2023
In this article, two unique and different ways of accessing an element from an array rather than the conventional arr[i] expression are discussed below.
- Using pointer *(arr+1)
- Using a little manipulation i[arr] for using arrays and the reason behind that.
When a C++ program is compiled, a symbol table is generated simultaneously. It is formed to store the corresponding values of the address of all the variables used in the program.
Let us consider a C++ program and see what will the symbol table for the corresponding program:
C++
#include <iostream>
using namespace std;
int main()
{
int a = 5;
cout << "Value of a: " << a;
cout << "\nAddress of a: " << &a;
return 0;
}
|
Output
Value of a: 5
Address of a: 0x7ffefad3072c
The symbol table for the program above would be like this:
Variable Name |
Address
|
Value |
a
|
0x7ffe58e7cc4
|
5
|
So, from the symbol table, it can be seen that every variable is assigned an address. Therefore, when the array is initialized, it also gets some address. In the table, an array gets stored in form of a pointer pointing towards the first element.
The below example is another simplest way of accessing array elements in C++.
C++
#include <iostream>
using namespace std;
int main()
{
double num[] = { 11, 12, 13, 14, 15, 16 };
double add = 0;
double count = 0;
double avg;
cout << "The number is=" ;
for ( const double & n : num) {
cout << n << " " <<endl;
add += n;
++count;
}
cout << "Addition of numbers= " << add << endl;
avg = add / count;
cout << "average of numbers= " << avg << endl;
return 0;
}
|
Output
The number is=11
12
13
14
15
16
Addition of numbers= 81
average of numbers= 13.5
Example:
int a[10];
gets stored like:
*(a) - which points to the first element.
*(a+1) - which points to second element.
Similarly we can have the last element pointed by *(a+(n-1)) we have (n-1) as arrays in C++ have zero based indexing
Using this concept let us discuss the first method of accessing the arrays-
Using the concept of pointers
Below is the C++ program to implement the above concept:
C++
#include <iostream>
using namespace std;
int main()
{
int arr[10];
for ( int i = 0; i < 10; i++) {
*(arr + i) = i + 1;
}
cout << "Values : " ;
for ( int i = 0; i < 10; i++) {
cout << *(arr + i) << ' ' ;
}
return 0;
}
|
Output
Values : 1 2 3 4 5 6 7 8 9 10
Fun Method:
As observed, an array can be used as *(arr). Therefore, it can be said that:
As known,
*(p + 1) is exactly the same as *(1 + p)
Therefore, *(arr + i) in above code can also be written as *(i + arr)
and basically *(arr + i) means a[i] implying,
*(i + arr) can also be written as i[a]
Below is the C++ program to implement the above concept:
C++
#include <iostream>
using namespace std;
int main()
{
int arr[10];
for ( int i = 0; i < 10; i++) {
i[arr] = i + 1;
}
cout << "Values: " ;
for ( int i = 0; i < 10; i++) {
cout << i[arr] << ' ' ;
}
return 0;
}
|
Output
Values: 1 2 3 4 5 6 7 8 9 10
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...