2012-03-24 3 views
0

я есть этот 3-D объявление массива: A[10..29][2..6][-1..0].строк из основных 3-D-адрес массива

Предполагая, что эта строка-мажорной массив хранится начиная с базового адреса 100, где элемент А [25] [4] [ -1] сохранен? мой ответ 416

следующий вопрос: Используя те же предположения, какой элемент хранится по адресу 2000?

Как я могу решить такой вопрос?

+1

Что это за декларация? '10..29, 2..6, -1..0'? Я что-то упускаю? –

+0

Это полный вопрос: Рассмотрим следующее трехмерное объявление массива: A [10..29] [2..6] [- 1..0]. # Составите первые 10 элементов массива, предположив, что они хранятся в строчном порядке. # То же самое для столбца major # При каждом элементе массива размер 20, каков размер общего массива? Вам не нужно давать ответ, если вы дадите мне правильное уравнение. # Принимая этот массив строк, хранится начиная с базового адреса 100, где хранится элемент A [25] [4] [- 1]? # Используя те же предположения, какой элемент хранится по адресу 2000? – nullException

ответ

0

Я думаю, что это может помочь. Я поместил его в блок кода, чтобы он хорошо выравнивался.

/* 
* Assuming that the array is laid out row/column/other then... 
*  Row-major   Column-major 
*  A[10][2][-1]  A[10][2][-1] 
*  A[10][2][0]   A[10][2][0] 
*  A[10][3][-1]  A[11][2][-1] 
*  A[10][3][0]   A[11][2][0] 
*  A[10][4][-1]  A[12][2][-1] 
*  A[10][4][0]   A[12][2][0] 
*  A[10][5][-1]  A[13][2][-1] 
*  A[10][5][0]   A[13][2][0] 
*  A[10][6][-1]  A[14][2][-1] 
*  A[10][6][0]   A[14][2][0] 
* 
* Since the array is 20 rows (29 - 10 + 1) by 5 columns (6 - 2 + 1) by 
* 2 other (0 - (-1) + 1), with each elelment given as size 20, the 
* overall array size is 20 * 5 * 2 * 20 = 4000. 
* 
* The address of element A[25][4][-1], given the array is row-major 
* begining at 100 is... 
* Base address               100 
* Offset index0 = (25 - 10) * ((6 - 2 + 1) * (0 - (-1) + 1)) * 20 = 3,000 
* Offset index1 =     (4 - 2) * ((0 - (-1) + 1)) * 20 =  80 
* Offset index2 =        (-1 - (-1)) * 20 =  0 
* Offset for A[25][4][-1]           = 3,180 
* 
* Now that you have the idea, I will leave it to you to determine what element 
* is at address 2000. Here is a hint, repeat the above but using substraction. 
*/ 
Смежные вопросы