Я веб-разработчик, желающий расширить свой кругозор, чтобы улучшить программирование в целом. Я сделал немного Java и несколько простых приложений для Android. Я' Теперь я изучаю языки более низкого уровня, такие как C и Go (которые, я должен сказать, имеют красивый синтаксис и отличные идеи, хотя я, возможно, слишком неопытен, чтобы комментировать). чтобы понять примеры на веб-сайте Go , я продолжаю сталкиваться со специальным символом звездочки в следующем примере:
s := "hello"
if s[1] != 'e' {
os.Exit(1)
}
s = "good bye"
var p *string = &s
*p = "ciao"
Кроме того, я только что заметил, что с «& s» это назначение по ссылке (я может быть, использовать PHP поговорить здесь)?
Полагаю, это означает то же самое, что и в C
p - указатель на строку
Оператор var p * string = & s
назначит адрес объекта s
в p
Следующая строка * p = "ciao"
изменит содержимое s
См. эту ссылку из Вопросы и ответы по языковому дизайну
Интересно, что нет арифметики с указателями
Почему нет арифметики с указателями? Безопасность. Без арифметики указателя можно создать язык что никогда не может привести к незаконному адрес, который успешно завершился неверно. Компилятор и аппаратное обеспечение имеют продвинулся до точки, где петля использование индексов массива может быть как эффективен как цикл с использованием указателя арифметика. Также отсутствие указателя арифметика может упростить реализация мусора коллекционер.
Теперь я хочу начать изучать GO!
Я не знаю Go, но, судя по синтаксису, похоже, что он похож на C - это указатель. Он похож на эталонный, но более низкого уровня и более мощный. Он содержит адрес памяти рассматриваемого элемента. & a
получает адрес памяти переменной, а * a
разыменовывает ее, получая значение по адресу памяти.
Кроме того, *
в объявлении означает, что это указатель.
Да, это похоже на PHP в том, что значение s
изменено, потому что p
и & s
указывают на один и тот же блок памяти.
Символ *
используется для определения указателя как в C, так и в Go. Вместо реального значения переменная имеет адрес расположения значения. Оператор &
используется для получения адреса объекта.
*
, прикрепленный к типу ( * строка
), указывает указатель на тип.
*
, прикрепленный к переменной в присвоении ( * v = ...
), указывает косвенное присвоение. То есть измените значение, на которое указывает переменная.
*
, прикрепленный к переменной или выражению ( * v
), указывает на разыменование указателя. То есть возьмите значение, на которое указывает переменная.
&
, прикрепленный к переменной или выражению ( & v
), указывает ссылку. То есть создать указатель на значение переменной или на поле.