Обычно мы называем вызовы malloc
динамическим c выделением, независимо от того, используете ли вы переменную или константу. Даже справочная страница для malloc
называет это так:
mallo c, бесплатно, callo c, reallo c - выделить и освободить динамику c память
Итак, для ваших инструкторов заявите:
Преподаватель говорил о базовых c структурах данных и обучал массивам. Он рассказал нам традиционный способ создания массивов с использованием синтаксиса int arr [100], но затем он представил нам mallo c.
По его словам, поскольку размер памяти не меняется, это не динамическое c Я полагаю.
Ну, в некотором смысле он прав, если вы строго посмотрите на то, что означает «Dynami c» в более общем смысле. Прямо сейчас у нас есть соглашение, которое вызывает выделение всех malloc
динамических c. Это соглашение могло быть таким, как утверждает ваш учитель, без каких-либо проблем. Но это не так.
Более того, согласно рассуждениям ваших учителей, использование VLA: s (массив переменной длины) или alloca
с переменной будет считаться динамическим c распределением, но это не так. VLA может быть объявлен следующим образом: int arr[n]
или alloca
эквивалент: int *arr = alloca(n*sizeof(*arr))
.
Так что даже если вы могли возразить, что ваш учитель прав, это только вызовет путаницу, поскольку это противоречит соглашению.
Кроме того, самая динамичная c вещь в использовании malloc
- это то, что размер выделения можно изменить позже. Вы не можете сделать это с массивами, даже с VLA: s. И вы не можете сделать это с памятью, которую вы выделили с помощью alloca
.
Но в качестве примечания, я сомневаюсь в компетентности ваших учителей, если они учат вас писать
p = (int*)malloc(n * sizeof(int))
вместо
p = malloc(n * sizeof(*p))
- Приведение не требуется, просто добавляется беспорядок
- Использование
sizeof(*p)
вместо sizeof(int)
безопаснее
Связано: Привести ли результат mallo c?