Олеся
Олеся

И опять про динамические переменные.

Итак, я понял, что динамические переменные отличаются от статических тем, что они не имеют идентификатора (ну это логично, вообще-то) . Но, исходя из этого, можно сказать, что обычный массив в С есть динамическая переменная. Так ли это?
Вот пример:

#include

int main(void) {

int Arr[2];

Arr[1] = 8;

/*
Ведь это - Arr[1], как вам известно, не идентификатор, а синтаксический сахар над * (Arr + 1)
Разницы никакой между Arr[1] = 8 и * (Arr + 1) = 8
*/

return 0;

}

Если Arr[2] - это статический массив, значит вчера наиболее точный ответ дал Jurijus Zaksas, в частности: "Если ты оставляешь выделение памяти на усмотрение компилятора, транслятора, чего угодно - это статика. "

Dj
Djoly

Arr - это идентификатор массива. Весь массив - статический.

Евгений Шепилев
Евгений Шепилев

статические -те, память под которые описывается и выделяется до исполнения проги.

динамические - память под них вычисляется, выделяется и освобождается по ходу исполнения проги

int Arr[2];//статика

int *arr;
...
arr=malloc(2*size_of(int));
...
free(arr);
// указатель arr - статика, а то куда он указывает - динамика

Надежда
Надежда

динамический - это когда при написании проги не знаешь число элементов, а узнаешь его только погра прога работает. создается указатель и к нему присваевается начало в памяти для твоего массива. Приме кода:

#include
using namespace std;

int main()
{
int num; // размер массива
cout << "Enter integer value: ";
cin >> num; // получение от пользователя размера массива

int *p_darr = new int[num]; // Выделение памяти для массива
for (int i = 0; i < num; i++) {
// Заполнение массива и вывод значений его элементов
p_darr[i] = i;
cout << "Value of " << i << " element is " << p_darr[i] << endl;
}
delete [] p_darr; // очистка памяти
return 0;
}

ДП
Дмитрий Полынников

Возможно и ошибаюсь, но здесь перемешаны различные смыслы статический / динамический.

Что есть переменная? Это всего лишь обозначение некоторого адреса в памяти с заданием типа данных, который по этому адресу хранится.

Статическая переменная - адрес памяти в программе, известный на этапе ассемблирования (т. е. компиляции) .
Динамическая переменная - адрес памяти в программе, получаемый на этапе выполнения (new, malloc и прочие) .

Т. е.

int *p = new int;

p - "статическая" переменная, хранящая адрес, "динамически" получаемый new и указывающий на выделенный в как минимум sizeof(int) байт объем памяти.

+ Есть модификатор класса памяти static, но про него читайте сами, в двух словах не рассказать.

ИН
Ирина Никул

Статический массив это статический массив. Динамический - динамический. В чём разница? В том, что для статического массива память выделяется в стеке и в течении выполнения всей программы её (памяти) размер постоянен. Для динамического массива память выделяется на кучи и её размер может меняться.
И да, с указателями можно работать так же, как и с массивами, т. е.
#include
using namespace std;

int main(){

int *p;
int ar[3];

p = ar; // указатель на первый элемент массива
// заполняем массив
ar[0] = 3;
ar[1] = 7;
ar[2] = 23;

cout << p[1] << endl; // обратились ко второму элементу массива
cout << *(++p) << endl; // обратились ко второму элементу массива
cout << ar[1] << endl; // обратились ко второму элементу массива

system("pause > nul");
return 0;
}

Но это же разные вещи, как мне кажется.

Наталья Саглаева
Наталья Саглаева

В каждом языке свои правила и можно написать язык, который будет работать, но в корне все основополагающие теорические принципы он перекроет новыми

Похожие вопросы
Изобразить динамическую заставку.
динамический массив, delphi
Динамическое программирование
Динамические массивы
Динамическая память в С++
c++ динамический массив
Можно ли строить xpath динамически?
PHP. Переменые переменных и массивы.
Переменная, определённая в теле if(ну или в какой-нибудь другой конструкции) считается динамической?
С точки зрения транслятора, все переменные (создаваемые при трансляции) являются динамическими?