Страницы

Поиск по вопросам

четверг, 28 ноября 2019 г.

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

#c++ #массивы


Всегда думал, что знаю, что такое элемент массива, а теперь не уверен.
Как мы знаем, классический массив фиксированного размера состоит из набора ячеек.
Например:
int a[10] - массив из 10 ячеек типа int (каждая по sizeof(int) байт)
Ячейка массива - это область памяти, к которой мы можем обратиться по индексу. Ее
положение в массиве поменять нельзя. В каждой ячейке хранится значение (в нашем примере
- скалярное).
Вопрос: элемент массива - это синоним ячейки (области памяти) или синоним значения
ячейки?
Например, верно ли утверждение: "элементы массива можно поменять местами"?
Интересует ответ вообще и ответ для С++ в частности.     


Ответы

Ответ 1



По сути своей, элемент массива - это отдельная переменная. И определение и смысл можно взять для неё: Переме́нная — поименованная, либо адресуемая иным способом область памяти, имя или адрес которой можно использовать для осуществления доступа к данным, находящимся в переменной (по данному адресу). Вот. То есть формально это область памяти. Ячейка. Но в разговорном языке это значение наблюдается лишь частично. Видимо, многие (как и я) не делают существенного различия между этими понятиями, а кто-то и не подозревает об оном. Когда говорят об операциях с массивом как таковым - "создать массив из нескольких элементов", "добавить элемент", "удалить элемент" - можно считать, что имеют в виду операции над ячейками. Ну, не в том смысле, что их создают или удаляют, а в том, что выделяют или освобождают память. Так как значения там, собственно, роли никакой не играют. Когда же доходит дело до алгоритмов обработки, то тут уже на первый план выходит значение. И фраза "поменять местами элементы массива" в контексте какого-нибудь алгоритма, например, сортировки или шифрования будет понятна и верна. Или "найти максимальный/минимальный элемент" - тут тоже понятно, что имеется в виду вовсе не их физическое расположение в памяти или индекс. =)

Ответ 2



Есть модель - массив и его элементы, а есть реализация: например, в С - это указатели и адресная арифметика. "Поменять местами элементы" - это что-то вроде модели, абстракции, постановка задачи. А присвоение значений в ячейки по определённым адресам - это реализация.

Ответ 3



Элементом массива может быть объект.. В случае ассоциативных массивов return { object: { name: "First", dest: "Just for fun" }, object_2: { name: "Second", dest: "Just for fun" } }; примерно вот так )) если думать, что всё относительно, то можно конкретизироваться )) а не абстрагироваться

Ответ 4



Вопрос: элемент массива - это синоним ячейки (области памяти) или синоним значения ячейки? Например, верно ли утверждение: "элементы массива можно поменять местами"? Массив, в общепринятом понимании, это набор значений (элементов), расположенных в ячейках. Каждая ячейка индексируется. Как правило, индексы мы не трогаем, а работаем с содержимым. Следовательно, утверждение "элементы массива можно поменять местами" - верное, и оно соответствует обмену содержимым "ячеек". Утверждение "элементы массива можно поменять местами" может (но не обязано) не соответствовать обмену содержимым в том случае, если мы ввели собственные механизмы индексации (а по факту - адресации), например перегрузили оператор []. Это нечастый случай, скорее исключение из правил, которое должно оговариваться.

Комментариев нет:

Отправить комментарий