В foo
, a
и b
- это отдельные локальные переменные.Установка для них одинакового значения не влияет на предыдущие значения - последняя строка foo
в настоящее время в основном ничего не делает.
В пределах foo
, a
равно изначально указатель на то же местоположение, что и a
в main
, а b
- указатель на то же местоположение, что и b
в main.Последняя строка просто делает значение a
в foo
таким же, как b
, а именно указатель на то же место, что и b
в main.Поэтому, если вы добавите строку
*a = 7;
в конце foo
, вы увидите вывод «5, 7».
(Ваш код определенно будет прощекстати, поговорим о том, использовали ли вы разные имена переменных в main
и foo
.
Если вы пытаетесь сделать a
и b
в main
"псевдонимом"друг друга, вы не добьетесь успеха.Они являются отдельными локальными переменными в стеке и останутся таковыми.Вы не можете заставить стек «сжаться» под псевдонимом двух, что бы вы ни делали.