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