3 / 3 / 1
Регистрация: 17.12.2018
Сообщений: 257
|
|
1 | |
Для чего нужны статические массивы?05.01.2019, 07:05. Показов 5491. Ответов 11
Метки массивы c++ (Все метки)
Никак не могу понять, для чего они нужны в программировании, ведь есть динамические и их можно сделать константными , чтобы не менялся размер массива.
0
|
05.01.2019, 07:05 | |
Ответы с готовыми решениями:
11
Для чего нужны переменные, и прочее типа, константа, типы , массивы и т.к.д ? Для чего нужны указатели? Для чего нужны интерфейсы? Для чего нужны файлы с расширением .h, .c? |
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
|
|
05.01.2019, 09:34 | 2 |
Сообщение было отмечено Ivan _pupkin как решение
Решение
Динамические структуры данных – это структуры данных, память под которые выделяется и
освобождается по мере необходимости; тип может быть известен во время выполнения. Статическая память хранит глобальные переменные и константы; размер определяется при компиляции; размер памяти остается неизменным в процессе работы программы. Допустим я разраб игры, и я знаю что у меня 100 различных персонажей, и я знаю что их кол-во не будет изменяться. Я могу создать глобальный массив статического типа на 100 элементов с названием каждого персонажа.
1
|
Комп_Оратор)
|
|
05.01.2019, 12:01 | 3 |
Кусок динамической памяти выделенной для блока определённого типа данных называют массивом не имея в виду, что данный "массив" это тип сам по себе. Тут имеют ввиду контракт. Сам указатель (не *void) имеет перегруженный оператор индексного обращения и этим самым предлагает интерфейс массива. Размер во время исполнения изменить нельзя. Но можно освободить этот кусок или передать другому указателю для дальнейшего использования и утилизации, а старому указателю выделить кусок нового размера. То есть, если не работать с адресами как со значениями напрямую, то создаётся видимость того, что "массив" изменил размер. Для понимания происходящего нужно научиться работать со статическими и автоматическими массивами-типами, а затем поучиться выделять память как в стиле С (имхо) так и в стиле С++. Сначала под единичные данные, потом под одномерные массивы. А потом уже каскадные выделения, когда в одном акте выделяются указатели на то что будет выделено далее, до тех пор пока не настанет черёд выделить память под одномерные цепочки данных. У динамических массивов размер кусков одного каскада может отличаться, кстати. Это редко бывает нужно и об этом часто забывают, но факт.
Нативный массив это тип данных в С++. Это значит, что размер должен быть известен во время компиляции. То есть объявления int a[123]; и int a[124]; объявляют два разных типа. Нативные массивы создаются во время компиляции и они не тратят время исполнения. Размер во время исполнения изменить нельзя. Как и у любого другого типа.
1
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,887
|
|
05.01.2019, 12:55 | 4 |
Статическими массивами пользоваться проще. Нет возни с выделением - проверкой - освобождением (вы ведь не забываете про ВСЕ эти этапы, не так ли?). В некоторых случаях быстрее доступ. Более простая реализация и использование многомерных массивов: напоминаю, с С/С++ динамических многомерных массивов нет вообще.
1
|
3 / 3 / 1
Регистрация: 17.12.2018
Сообщений: 257
|
|
05.01.2019, 13:34 [ТС] | 5 |
IGPIGP, не многое понял , но очень интересно
Добавлено через 2 минуты Да , я стараюсь уделять этому особое внимание, поскольку часто слышу, что с++ и с сложны как раз , из-за этого. А как это нету? Ведь можно создать динамическую матрицу, или я чего-то не знаю?
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
05.01.2019, 14:49 | 6 | |||||
Сообщение было отмечено Ivan _pupkin как решение
Решение
Ivan _pupkin, в C/C++ нет матриц, а то, что обычно называют динамически созданным многомерным массивом, ни что иное, как массив массивов.
1
|
Комп_Оратор)
|
|
05.01.2019, 15:31 | 7 |
Сообщение было отмечено Ivan _pupkin как решение
Решение
Ivan _pupkin, не стесняйтесь переспросить.
Я старался. Вообще, Вам как новичку простительно и мы все идём на поводу, в таких случаях. Но имеет смысл заметить, что массивы объектов в динамической памяти, это не динамические (расширяющиеся) массивы. А нативные массивы, это что-то третье. Есть ещё контейнеры std::array<> и std::vector<> и это четвёртое и пятое. А ещё есть std::unique_ptr который умеет владеть "массивом" в динамической памяти.Это всё не ляжет так как должно бы лечь, если не начать с плотной упаковки простых вещей. Посмотрите на рекомендацию, начать с простых встроенных типов (обходя char десятой дорогой! Тип bool тоже не для данного случая).Вообще, сравнение "массивов" в динамической памяти с нативными массивами - вопрос разноплановый и многослойный. Но всё начинается от связи понятия "тип" с понятием "адресуемый участок памяти". Старайтесь понять то, что возможно, но хорошо. Остальное - потом.
1
|
3 / 3 / 1
Регистрация: 17.12.2018
Сообщений: 257
|
|
05.01.2019, 15:59 [ТС] | 8 |
А вы случаем не знаете , как можно просматривать эл-ты динамической матрицы?
0
|
Комп_Оратор)
|
|
05.01.2019, 17:16 | 9 |
Вы имеете в виду 2-D "массив"? Это зверь представляет из себя одномерный массив указателей на одномерные массивы заявленного типа. То есть, доступ осуществляется двойным индексированием. С виду оно похоже на таковое и у обычных (нативных) 2-D массивов (хотя они внутренне одномерны в отличие от "динамических").
зы. всё в кавычках относится к блокам выделенным в динамической памяти. Добавлено через 25 минут Есть ещё очень крутой зверь https://en.cppreference.com/w/cpp/numeric/valarray Но для 2D случая его надо бы обернуть шаблоном вроде этого: https://stackoverflow.com/ques... s-2d-array Но Вам это ещё не надо. Поэтому старайтесь избегать матриц векторов и пр. маттерминов в области реализации. Пусть они останутся в предметной области.
1
|
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
|
||||||
05.01.2019, 17:43 | 10 | |||||
Маленькая пародия
1
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,887
|
|||||||||||
06.01.2019, 16:08 | 12 | ||||||||||
Нет. Наиболее близкое - отображение многомерного массива на одномерный:
Есть и более экзотические имитации многомерных массивов, но они применяются еще реже.
1
|
06.01.2019, 16:08 | |
06.01.2019, 16:08 | |
Помогаю со студенческими работами здесь
12
Для чего нужны заголовочные файлы? Для чего нужны callback-функции Для чего нужны вложенные структуры? Для чего нужны указатели на функции? try catch throw для чего нужны? Для чего нужны битовые операции? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |