已知二维数组按行存储
1. 已知二维数组A[M][N]采用按行为主的顺序存储结构,每个元素占k个存储单元,第一个元素的地址为L
其地址应该是(i*M)+(j+1)
2. 设二维数组A[1...m,1…n]按行存储在数组B中,则二维数组A[i,j]在一维数组B中的下表为
A
A[i][j] 的前面有i-1行,而每行n个元素,所以 (i-1)*n表示i行前面的元素。
j就表示位于本行的第几个元素,不用变。
3. 二维数组A按行顺序存储,其中每个元素占2个存储单元。
设二维数组a[8][10]中,每个数组元素占4个存储单元,数组元素a[2][2]按行优先顺序存放的存储地址是1000,则数组元素a[0][0]的存储地址是
1000-4*(2*10+2)=912
4. 已知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是
答案是 LOC(A[0][0]) + (i * n + j) * k
因为是采用行序为主方式存储的,即先存第1行,再第2行、第三行……这样。
所以A[i][j]前面有i行元素,每行元素有n个;A[i][j]为本行第j+1个元素,本行有j个元素位于A[i][j]前,所以A[i][j]到数组的起始位置处,中间共有i * n + j个元素,每个元素占k个存储单元,所以就是LOC(A[0][0]) + (i * n + j) * k
5. c语言一个9x9的二维数组,按行序为主的存储方式进行存储,则第24个元素是怎么算
int main()
{
int shuzu[9][9];
int i = 0,j=0;
for (i = 0;i<9;i++)
{
for (j = 0;j<9;j++)
{
shuzu[i][j] = i*9+j+1;//1--99
}
}
printf("第24个元素是%d,在第%d行,第%d列",shuzu[24/9][24%9],24/9,24%9);
return 0;
}
执行结果
6. 对于二维数组,有行优先顺序和什么两种不同的存储方式
对于二维数组,有行优先顺序和列优先顺序两种不同的存储方式。
二维数组A[m][n],这是一个m行n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t。
按“列优先顺序”存储时,地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t。存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。
(6)已知二维数组按行存储扩展阅读:
数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。数组中的所有元素都具有相同类型(和结构类中的字段不同,它们可以是不同类型)。数组中的元素存储在一个连续性的内存块中,并通过索引来访问(和结构类中的字段不同,它们通过名称来访问)。
在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用 Variant 数组时更要格外小心,因为他们需要更大的存储空间。
7. c语言中二维数组在内存中是按什么优先存放的
C语言中
二维数组是按行优先存储的
即 在内存中存一个二维数组时 先把数组中第一行的数组元素存完 再接着存下一行的 直到存完。
ps:定义一个二维数组 如 int a[m][n] 该数组为m行 n列的矩阵,在内存中 这样顺序存的:
a[0][0] a[0][1] ... a[0][n-1] a[1][0] a[1][1]...
不知道是不是帮到你的忙了
望采纳
8. 已知10×12的二维数组A,按“行优先顺序”存储,每个元素占1个存储单元
A[5][5]的存储地址
=A[1][1]的存储地址+((5-1)*12+(5-1))*1
=420+((5-1)*12+(5-1))*1
=472
选择答案C。