Ах, это имеет больше смысла ... это потому, как работает указатель. В обоих примерах вы передаете копию указателя на функцию. Представьте, что y
- это лист бумаги с надписью «вторая дверь слева», это комната, в которой мы хотим хранить строку.
Теперь, в первом примере вы делаете копию этого клочка бумаги, а метод берет эту копию и стирает то, что он говорит. Так как это всего лишь копия бумаги, оригинал не затронут.
Итак, теперь, когда мы вернулись и хотим напечатать содержимое y, мы следуем инструкциям, находим «вторую дверь слева», открываем ее и находим только «привет»
Во втором примере мы по-прежнему передаем копию бумаги, но теперь нам нужно взаимодействовать, поэтому мы следуем инструкциям, чтобы добраться до «второй двери слева», и здесь мы добавляем строку «мир». ». Итак, теперь, когда мы вернулись и хотим напечатать содержимое y, мы следуем инструкциям, написанным на нашем оригинальном листе бумаги, находим «вторую дверь слева», открываем ее и находим «привет мир».
Если бы мы использовали ключевое слово ref
, мы бы не передали копию бумаги, но саму бумагу методу. Поэтому, когда метод стирает то, что написано на бумаге, мы теперь вернулись без указания направления, чтобы найти дверь, где хранится наша строка.
Я знаю, это немного детское объяснение, но обычно оно работает, когда пытаюсь объяснить указатели.