我了解步幅的基本概念(两次连续访问数组之间的距离)。然而,当遇到一个应用问题,即访问同一数组的不同类型的循环之间的步幅如何时,我不确定确切的答案是什么。
例如,我不确定如何在嵌套循环中计算数组访问。这是我遇到的两个示例问题:
功能A:
int i, j, k;
for (i = 0; i < MSIZE; i++) {
for (j = 0; j < MSIZE; j++) {
for (k = 0; k < MSIZE; k++) {
sum = sum + (array_a[i][k] * array_b[k][j]);
}
array_r[i][j] = sum;
}
}
* a。访问array_a的步幅(以字节为单位)是什么?
b。访问数组_b的步幅(以字节为单位)是什么?*
功能B
int i, j, k;
for (i = 0; i < MSIZE; i++) {
for (k = 0; k < MSIZE; k++) {
for (j = 0; j < MSIZE; j++) {
array_r[i][j] = array_r[i][j]+ (array_a[i][k] * array_b[k][j]
}
}
}
* a。访问array_a的步幅(以字节为单位)是什么?
b。访问数组_b的步幅(以字节为单位)是什么?*
======================
将在此处发表我对问题的理解:
在函数A中,连续访问array_a(因为k是内部循环,所以访问数组_a的方式类似于 array_a [i] [k],array_a [i] [k + 1],array_a [i] [k + 2] ,因此检索到的元素始终彼此相邻)。 array_b从一列跳到另一列(因为 array_b [k] [j],array_b [k + 1] [j],array_b [k + 2] [j] )。
因此,函数A的答案应为:
a。访问array_a的步幅(以字节为单位)是多少?
Ans:4个字节(因为一个整数通常为4个字节,这使得两个连续整数之间的距离)
b。访问array_b的步幅(以字节为单位)是什么?
答案:MSIZE x 4字节(教科书还指出MSIZE = 500,因此应该为2000字节)
在功能B中,连续访问array_a和array_b。因此,它们的步幅均为4个字节。
功能B
a。访问array_a的步幅(以字节为单位)是多少?
回答:4个字节
b。访问array_b的步幅(以字节为单位)是什么?
回答:4个字节