Элемент массива. Терминологическая путаница

Рейтинг: 16Ответов: 1Опубликовано: 29.03.2011

Всегда думал, что знаю, что такое элемент массива, а теперь не уверен. Как мы знаем, классический массив фиксированного размера состоит из набора ячеек. Например:

int a[10] - массив из 10 ячеек типа int (каждая по sizeof(int) байт)

Ячейка массива - это область памяти, к которой мы можем обратиться по индексу. Ее положение в массиве поменять нельзя. В каждой ячейке хранится значение (в нашем примере - скалярное).

Вопрос: элемент массива - это синоним ячейки (области памяти) или синоним значения ячейки? Например, верно ли утверждение: "элементы массива можно поменять местами"?

Интересует ответ вообще и ответ для С++ в частности.

Ответы

▲ 11Принят

По сути своей, элемент массива - это отдельная переменная. И определение и смысл можно взять для неё:

Переме́нная — поименованная, либо адресуемая иным способом область памяти, имя или адрес которой можно использовать для осуществления доступа к данным, находящимся в переменной (по данному адресу).

Вот. То есть формально это область памяти. Ячейка.

Но в разговорном языке это значение наблюдается лишь частично. Видимо, многие (как и я) не делают существенного различия между этими понятиями, а кто-то и не подозревает об оном.

Когда говорят об операциях с массивом как таковым - "создать массив из нескольких элементов", "добавить элемент", "удалить элемент" - можно считать, что имеют в виду операции над ячейками.

Ну, не в том смысле, что их создают или удаляют, а в том, что выделяют или освобождают память. Так как значения там, собственно, роли никакой не играют.

Когда же доходит дело до алгоритмов обработки, то тут уже на первый план выходит значение. И фраза "поменять местами элементы массива" в контексте какого-нибудь алгоритма, например, сортировки или шифрования будет понятна и верна. Или "найти максимальный/минимальный элемент" - тут тоже понятно, что имеется в виду вовсе не их физическое расположение в памяти или индекс. =)