2-D массив в C, генерация адреса - PullRequest
6 голосов
/ 15 февраля 2011

Как адреса генерируются в массивах в C, скажем, как [x] [y] достигает определенного значения, я знаю, что это не такой уж большой вопрос, но вот-вот начнется кодирование.

Ответы [ 4 ]

3 голосов
/ 15 февраля 2011

Что ж, это делается в зависимости от типа данных, чей массив вы рассматривали.

Скажем, для массива Integer каждое значение содержит 4 байта, поэтому длина строки X займет 4X байтов.

Таким образом, двумерная матрица X * Y будет иметь размер 4 * X * Y байт.

Любой адрес, скажем Arry [X] [Y], будет рассчитан как: (Базовый адресАрри) + (X * Количество столбцов) + (Y // Смещение в текущей строке)

1 голос
/ 15 февраля 2011

2-мерные массивы в C являются прямоугольными. Например:

int matrix[2][3];

выделяет один блок памяти размером 2*3*sizeof(int) байта. Для адресации matrix[0][1] достаточно добавить 0 * (3 * sizeof(int)) к sizeof(int). Затем добавьте эту сумму к адресу, с которого начинается matrix.

0 голосов
/ 15 февраля 2011

Например

char anArray[][13]={"Hello World!","February","John"};

Вы можете визуализировать это как:

anArray:

H|e|l|l|o| |W|o|r|l|d|!|\0|F|e|b|r|u|a|r|y|\0|\0|\0|\0|\0|J|o|h|n|\0|\0|\0|0|\0
^                          ^                              ^
0                          13                             26
0 голосов
/ 15 февраля 2011

Вложенный массив - это массив массивов.

Например, int[][6] - это массив int[6].
Предполагая 4 байта int, каждый элемент во внешнем массиве имеет ширину 6 * 4 = 24 байта.

Следовательно, arr[4] получает третий массив во внешнем массиве или *(arr + 4 * 24).

arr[4] является нормальным int[]. arr[4][2] получает второй int в этом внутреннем массиве, или *(arr + 4 * 24 + 2 * 4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...