Динамические переменные в c
Автор Мурад Ахундов задал вопрос в разделе Другие языки и технологии
Зачем нужны динамические переменные в C++ Кто-нибудь объяснит на человеческом?) и получил лучший ответ
Ответ от Nikita zaharov[гуру]
Динами́ческая переме́нная — переменная в программе, место в оперативной памяти под которую выделяется во время выполнения программы. По сути, она является даже не переменной, а участком памяти, выделенным системой программе для конкретных целей. Динамическая переменная — один из классов памяти переменной.
Так как динамическая переменная создаётся во время выполнения программы, у неё нет собственного идентификатора. Работа с динамической переменной ведётся косвенно, через указатель. Создание такой переменной заключается в выделении участка памяти с помощью специальной функции. Эта функция возвращает адрес в памяти, который назначается указателю. Процесс доступа к памяти через указатель называется разыменованием. После окончания работы с динамической переменной выделенную под неё память необходимо освободить — для этого тоже есть специальная функция.
В языках программирования относительно низкого уровня указатели используются явно, в языках более высокого уровня динамические типы данных могут быть оформлены как классы, а процессы выделения и освобождения памяти описаны в конструкторе и деструкторе каждого класса.
Для экономного расходования памяти. Часто количество данных, которые будут перерабатываться в программе, заранее неизвестно.
Чтоб выделить нужное кол-во памяти для пользовательского типа данных.
Загрузка файла, какой массив нужен для его загрузки?
char a[9999999999] Занимает слишком много памяти
а
char b[55555] Может не хватить
Поэтому юзаем динамический
char *c = new char[Размер файла]
Есть стековая память, а есть куча. В стековой памяти данные лежат на своих местах, например, если мы создаём какой-то объект, то мы знаем, что первые несколько байт у него заложены под одно, следующие под другое и т. д. Если мы располагаем в стековой памяти массив, то он тоже должен иметь фиксированную длину. Если мы запускаем какой-то метод, то и в рамках этого метода всё на своих местах. Когда метод заканчивается или какой-либо объект уничтожается и т. д., то и стековая память освобождается. Когда же у нас динамическая переменная, то в стековой памяти у нас лежит только ссылка на эту переменную, которая сама располагается в куче, а не в стеке. Таким образом мы можем создать массив с заранее неизвестной длиной (динамический массив). Мы можем создавать переменные и объекты, которые сможем передавать в другие участки кода (через указатели на них). Но данные в куче нужно удалять самостоятельно.
На человеческом языке идею динамической памяти понять легко.
Представьте себе, что вы делаете вычисления в тетрадке. Каждая клетка, это результат, который вам нужен. Теперь возникает необходимость выполнить какие-то вычисления с большим объемом промежуточных данных. Вы достаете чистый лист. Делаете на нем вычисления, а полученный результат записываете в тетрадь. Лист с промежуточными расчетами вы выбрасываете.
Единственное отличие от бумажных расчетов в том, что в компьютере в можете запросить снова этот лист, стереть его содержимое и использовать в других расчетах.
подскажите, в чём измеряеться вязкость?
Вязкость (абсолютная вязкость, или динамическая вязкость) - это свойство жидкостей и газов,
подробнее...
Программирование С++ Что такое Динамические массивы?
Ну вообще даже в Википедии есть объяснение этой технологии.
Грубо говоря это карман, размер
подробнее...
да зачем нужны эти указатели ?? C++. Зачем нужны указатели? почему не обойтись без простой переменной??
Указатель содержит адрес первого байта объекта в памяти, тип указателя, говорит о том сколько
подробнее...
Как задать динамический массив в языке C#
int size; // будущий размер
int[] arr; // будущий массив
size =
подробнее...
Операции new и delete. Операции new и delete нужна теори про данные операции.
смотри msdn )
вот кое-что из Вики:
В языке программирования C++, new —
подробнее...
Статичная функция внутри класса. какие данные будут доступны всем образцам класса?
Полагаю, речь идет о С++?
> если мы создаем статичную ПЕРЕМЕННУЮ внутри класса
подробнее...
C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать?
Объясняю: массив - это ряд одинаковых значений (нет, я не Очевидность 🙂 ). Имя массива в C/C++
подробнее...
Что такое куча, стек и область данных на C/C++ ?
Куча - это область памяти, выделяемая и освобождаемая динамически. Есть менеджер кучи, который этим
подробнее...
Как узнать максимально возможный размер массива в С++?
Есть UINT_MAX в limits.h в 4294967295 элемента. Вопрос в том, какая разрядность у операционной
подробнее...
Оператор присваивания C++
Проблема с самоприсваиванием давно и легко решена:
#include <iostream>
подробнее...