N 维数组: N 维数组基本上是数组的数组。由于一维数组被标识为单个索引,二维数组使用两个索引标识,类似地, N 维数组使用N 个索引标识。多维数组声明如下:
int NDA[S1][S2][S3]……..[SN];
说明:
- 这里,NDA 是 N 维数组的名称。它可以是任何有效的标识符名称。
- 在上面的语法中, S 1 , S 2 , S 3 ……S N表示 N维的最大尺寸。
- 假设所有维度的下限为零。
- 上面的数组被声明为一个整数数组。它也可以是除整数以外的任何有效数据类型。
N维数组的地址计算:
假设:
- N维最大尺寸的N维数组NDA为S 1 , S 2 , S 3 , ………, S N 。
- 需要计算地址的元素分别具有索引l 1 , l 2 , l 3 , …………..l N 。
- 数组索引的下限可能不为零。例如,考虑以下数组 T: T[-5…5][2…9][14…54][-9…-2]。
说明:
- 在上面的数组T 中,索引的下限不是零。
- 这样数组索引的大小现在就不同了,可以使用以下公式计算:
UpperBound – LowerBound +1
- 所以,这里 S 1 = 5 – (-5) + 1 = 11。类似地,S 2 = 8,S 3 = 41 和 S 4 = 8。
对于地址计算,下限为t 1 、t 2 、t 3 …….t N 。有两种存储数组元素的方法:
- 行专业
- 专栏专业
列主要公式:
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 represents the width of the array i.e, the number of dimensions in the array.
- 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.
行主要公式:
Address of NDA[I1][I2]. . . .[lN] = BAd + W*[((E1S2 + E2 )S3 +E3 )S4 ….. + EN-1 )SN + EN]
学习公式的最简单方法:
对于行优先:如果宽度 = 5,则内部序列为E 1 S 2 + E 2 S 3 + E 3 S 4 + E 4 S 5 + E 5 ,如果宽度 = 3,则内部序列为E 1 S 2 + E 2 S 3 + E 3 。按顺序找出图案,并按照四个基本步骤来计算任意宽度的公式:
- 写出内部序列。
- 除第一项外,将右括号放在每个E 之后。所以对于宽度 = 5,它变成
E1S2 + E2)S3 + E3)S4 + E4)S5 + E5).
- 最初放置所有左括号。
((((E1S2 + E2)S3 + E3)S4 + E4)S5 + E5).
- 在公式中加入基地址和宽度。
Column Major的方法类似,但内部序列的模式与 row-major 模式相反。
对于列优先:如果宽度=5,则内部序列为E 5 S 4 + E 4 S 3 + E 3 S 2 + E 2 S 1 + E 1 。
示例:让我们以基地址为1200的多维数组A[10][20][30][40]为例。任务是找到元素A[1][3][5][6] 的地址。
这里,BAd = 1200,宽度 = 4。
S1 = 10,S2 = 20,S3 = 30,S4 = 40
由于未给出下限,因此假设下限为零。
E1 = 1 – 0 = 1;
E2 = 3 – 0 = 3;
E3 = 5 – 0 = 5;
E4 = 6 – 0 = 6。
任何技术(行优先或列优先)都可用于计算答案(除非指定)。
应用row-major的公式,直接把公式写成:
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。
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live