Calculating the address of an element in an N-dimensional array
N-Dimensional Arrays: The N-Dimensional array is basically an array of arrays. As 1-D arrays are identified as a single index, 2-D arrays are identified using two indices, similarly, N-Dimensional arrays are identified using N indices. A multi-dimensional array is declared as follows:
int NDA[S1][S2][S3]……..[SN];
Explanation:
- Here, NDA is the name of the N-Dimensional array. It can be any valid identifier name.
- In the above syntax, S1, S2, S3……SN denotes the max sizes of the N dimensions.
- The lower bounds are assumed to be zeroes for all the dimensions.
- The above array is declared as an integer array. It can be any valid data type other than an integer as well.
Address Calculation of N-Dimensional Arrays:
Assumptions:
- The N-Dimensional array NDA with the maximum sizes of N dimensions are S1, S2, S3, ………, SN.
- The element whose address needs to be calculated has indices l1, l2, l3, …………..lN respectively.
- It is possible that the array indices do not have the lower bound as zero. For example, consider the following array T: T[-5…5][2……9][14…54][-9…-2].
Explanation:
- In the above array T, the lower bounds of indices are not zeroes.
- So that the sizes of the indices of the array are different now and can be calculated by using the formula:
UpperBound – LowerBound +1
- So, here the S1 = 5 – (-5) + 1 = 11. Similarly, S2 = 8, S3 = 41 and S4 = 8.
For address calculation, the lower bounds are t1, t2, t3…….tN. There exist two ways to store the array elements:
The Column Major formula:
Address of NDA[I1][I2]. . . [IN] = BAd + W*[((…ENSN-1+ EN-1 )SN-2 +… E3 )S2+ E2 )S1 +E1]
- BAd represents the base address of the array.
- W is Storage Size of one element stored in the array (in byte).
- Also, Ei is given by Ei = li – ti, where li and ti are the calculated indexes (indices of array element which needs to be determined) and lower bounds respectively.
The Row Major formula:
Address of NDA[I1][I2]. . . .[lN] = BAd + W*[((E1S2 + E2 )S3 +E3 )S4 ….. + EN-1 )SN + EN]
The simplest way to learn the formulas:
For row-major: If width = 5, the interior sequence is E1S2 + E2S3 + E3S4 + E4S5 + E5 and if width = 3, the interior sequence is E1S2 + E2S3 + E3. Figure out the pattern in the order and follow four basic steps for the formula of any width:
- Write the interior sequence.
- Put the closing bracket after each E except the first term. So for width = 5, it becomes
E1S2 + E2)S3 + E3)S4 + E4)S5 + E5).
- Put all the Opening brackets initially.
((((E1S2 + E2)S3 + E3)S4 + E4)S5 + E5).
- Incorporate the base address and width in the formula.
The approach is similar for the Column Major but the pattern of the interior sequence is reverse of the row-major pattern.
For column-major: If width =5, the interior sequence is E5S4 + E4S3 + E3S2+ E2S1 + E1.
Example: Let’s take a multi-dimensional array A[10][20][30][40] with the base address 1200. The task is to find the address of element A[1][3][5][6].
Here, BAd = 1200 and width = 4.
S1 = 10, S2 = 20, S3 = 30, S4 = 40
Since the lower bounds are not given, so lower bounds are assumed to be zero.
E1 = 1 – 0 = 1;
E2 = 3 – 0 = 3;
E3 = 5 – 0 = 5;
E4 = 6 – 0 = 6.
Any of the techniques (Row-major or column-major) can be used for calculating the answer (unless specified).
By applying the formula for row-major, directly write the formula as:
A[1][3][5][6] = 1200 + 4(((1 × 20 + 3)30 +5)40 + 6)
=1200 +4((23 × 30 +5)40 +6)
=1200 + 4(695 × 40 + 6)
=1200 + (4 × 27806)
=112424.
Last Updated :
02 Nov, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...