Сам указатель ptr1
размещается в стеке. ptr1
указывает на память в куче.
Сам указатель ptr2
выделяется при запуске программы (до вызова main
) и является глобальным, но просто виден только в main
, поскольку он объявлен в своей области видимости. ptr2
указывает также на память в куче.
Объявление ptr2
за пределами main
сделает его видимым только во всех функциях под ним, но его хранилище будет таким же.