Вот если указано return 0; - то программа закончиться.Я правильно понимаю?
Только если это return в main().
return это команда закончить текущую функцию (и вернуть значение вызыающей функции)
А если ничего не указать?Она будет в памяти висеть или что?
С 1998 года она выполнит return 0 (опять же, справедливо только для main() ) как только достигнет конца функции main().
Т.е. если указываешь 0, то это типа false.
Это EXIT_SUCCESS.
А если указать 1?
Implementation defined. Обычно работает так же как и EXIT_FAILURE.
Фактически это код выхода. Он возвращается в ОС. Если программа была запущена из командной строки этот код выхода можно проверить чтобы узнать как была завершена программа.