global variables -------> data
static variables -------> data
constant data types -----> code and/or data.
Consider string literals for a situation when a constant itself would be stored in the data segment,
and references to it would be embedded in the code
local variables(declared and defined in functions) --------> stack
variables declared and defined in main function -----> also stack
pointers(ex: char *arr, int *arr) -------> data or stack,
depending on the context.
C lets you declare a global or a static pointer,
inwhichcase the pointer itself would end up in the data segment.
dynamically allocated space(using malloc, calloc, realloc) --------> heap
It is worth mentioning that "stack" is officially called
"automatic storage class".