Статический массив против динамического массива в C ++

независимо от того, является ли его C или нет, ведущее подчеркивание предоставляет программисту индикацию состояния, поэтому ему не нужно искать его. В PHP или любом объектно-ориентированном языке, где мы имеем дело с десятками тысяч свойств и методов, написанных тысячами авторов, видя, что префикс подчёркивания устраняет необходимость проскальзывать через класс и оценивать, является ли его объявленным приватным или защищенным или общедоступным. Это огромная экономия времени. практика началась до C, я уверен ...

79
задан Michał Perłakowski 12 October 2016 в 15:09
поделиться

4 ответа

Локальные массивы создаются в стеке и имеют автоматическую продолжительность хранения - вам не нужно вручную управлять памятью, но они уничтожаются, когда функция они в конце. Они обязательно имеют фиксированный размер:

int foo[10];

Массивы, созданные с помощью оператора new [] , имеют динамическую продолжительность хранения и хранятся в куче (технически «бесплатное хранилище»). Они могут иметь любой размер, но вам необходимо выделить и освободить их самостоятельно, поскольку они не являются частью кадра стека:

int* foo = new int[10];
delete[] foo;
89
ответ дан 24 November 2019 в 10:14
поделиться

] Я думаю, что семантика, используемая в вашем классе, сбивает с толку. Под «статическим», вероятно, подразумевается просто «постоянный размер», а под «динамическим», вероятно, подразумевается «переменный размер». В этом случае массив постоянного размера может выглядеть следующим образом:

int x[10];

, а «динамический» - это просто любая структура, которая позволяет увеличивать или уменьшать базовое хранилище во время выполнения. В большинстве случаев достаточно класса std :: vector из стандартной библиотеки C ++. Используйте его так:

std::vector<int> x(10); // this starts with 10 elements, but the vector can be resized.

std :: vector имеет оператор [] , поэтому вы можете использовать его с той же семантикой, что и массив.

11
ответ дан 24 November 2019 в 10:14
поделиться

Я думаю, в этом контексте это означает, что он статичен в том смысле, что размер фиксирован. Используйте std :: vector. Он имеет функцию resize ().

3
ответ дан 24 November 2019 в 10:14
поделиться

Статическим массивам выделяется память во время компиляции, а память размещается в стеке. В то время как динамическим массивам выделяется память во время выполнения, а память выделяется из кучи.

int arr[] = { 1, 3, 4 }; // static integer array.   
int* arr = new int[3]; // dynamic integer array.
8
ответ дан 24 November 2019 в 10:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: