Данные (классификация по времени жизни)
Статические (глобальные и описанные как static):
описываются
вне функций или с помощью static;
распределяются в памяти на этапе компиляции и существуют все время выполнения программы;
место в памяти – статический сегмент;
доступны в любой точке программы, за исключением подпрограмм, имеющих локальные переменные с тем же именем.
Автоматические:
описываются в функциях (без static);
распределяются в памяти на этапе выполнения (при каждом вызове подпрограммы) и освобождают память при завершении работы программы;
место в памяти – стек функций;
доступны в блоке функции.
Динамические:
описываются не данные, а их адреса (указатели);
распределяются и уничтожаются в памяти на этапе выполнения программы по специальным командам;
место в памяти – динамическая память (англ. куча – heap);
время жизни и область действия указателей определяется как для обычных (статических или автоматических) данных.