Судя по вашим комментариям, вас интересует, когда использовать тот или другой. Обратите внимание, что все типы выделения резервируют память компьютера, достаточную для соответствия значению переменной в нем. Размер зависит от типа переменной. Статически размещенные переменные выводятся компилятором в определенное место в памяти. Автоматически размещенные переменные прикрепляются к месту в стеке одним и тем же компилятором. Динамически распределяемые переменные не существуют до запуска программы и не имеют места в памяти, пока они не будут распределены с помощью 'mallo c' или других функций.
Все именованные переменные назначаются статически или автоматически. Переменные Dynami c распределяются программой, но для того, чтобы иметь возможность получить к ним доступ, по-прежнему нужна именованная переменная, которая является указателем. Указатель - это переменная, которая достаточно велика, чтобы хранить адрес другой переменной. Последний может быть распределен динамически, статически или автоматически.
Вопрос в том, что делать, если ваша программа не знает, сколько объектов ей нужно использовать во время выполнения. Например, что если вы прочитаете некоторые данные из файла и создадите динамическую структуру c, например, список или дерево в вашей программе. Вы не знаете точно, сколько членов такой структуры у вас будет. Это основное использование динамически размещаемых переменных. Вы можете создать столько их, сколько нужно, и поместить все в список. В простейшем случае вам нужна только одна именованная переменная, которая указывает на начало списка, чтобы знать обо всех объектах в списке.
Другое интересное использование - когда вы возвращаете сложную структуру из функции. При автоматическом размещении в стеке он перестает существовать после возврата из функции. Динамически распределяемые данные будут постоянными, пока они не будут явно освобождены. Таким образом, использование динамического распределения c поможет здесь.
Есть и другие варианты использования.
В вашем простом примере нет большой разницы между обоими случаями. Второй требует дополнительных компьютерных операций, вызов функции 'mallo c', чтобы выделить память для вашей структуры. В первом случае память для структуры выделяется в установленной программной области c, определенной во время запуска программы. Обратите внимание, что указатель во втором случае также размещен статически. Он просто сохраняет адрес области памяти для структуры.
Также, как правило, динамически распределяемые данные должны в конечном итоге освобождаться функцией free. Вы не можете освободить данные о состоянии c.