Что делает звездочка в «Go»

Я веб-разработчик, желающий расширить свой кругозор, чтобы улучшить программирование в целом. Я сделал немного 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 поговорить здесь)?

46
задан Salvador Dali 10 November 2015 в 01:54
поделиться

4 ответа

Полагаю, это означает то же самое, что и в C

p - указатель на строку

Оператор var p * string = & s назначит адрес объекта s в p

Следующая строка * p = "ciao" изменит содержимое s

См. эту ссылку из Вопросы и ответы по языковому дизайну

Интересно, что нет арифметики с указателями

Почему нет арифметики с указателями? Безопасность. Без арифметики указателя можно создать язык что никогда не может привести к незаконному адрес, который успешно завершился неверно. Компилятор и аппаратное обеспечение имеют продвинулся до точки, где петля использование индексов массива может быть как эффективен как цикл с использованием указателя арифметика. Также отсутствие указателя арифметика может упростить реализация мусора коллекционер.

Теперь я хочу начать изучать GO!

45
ответ дан 26 November 2019 в 19:59
поделиться

Я не знаю Go, но, судя по синтаксису, похоже, что он похож на C - это указатель. Он похож на эталонный, но более низкого уровня и более мощный. Он содержит адрес памяти рассматриваемого элемента. & a получает адрес памяти переменной, а * a разыменовывает ее, получая значение по адресу памяти.

Кроме того, * в объявлении означает, что это указатель.

Да, это похоже на PHP в том, что значение s изменено, потому что p и & s указывают на один и тот же блок памяти.

4
ответ дан 26 November 2019 в 19:59
поделиться

Символ * используется для определения указателя как в C, так и в Go. Вместо реального значения переменная имеет адрес расположения значения. Оператор & используется для получения адреса объекта.

4
ответ дан 26 November 2019 в 19:59
поделиться

* , прикрепленный к типу ( * строка ), указывает указатель на тип.

* , прикрепленный к переменной в присвоении ( * v = ... ), указывает косвенное присвоение. То есть измените значение, на которое указывает переменная.

* , прикрепленный к переменной или выражению ( * v ), указывает на разыменование указателя. То есть возьмите значение, на которое указывает переменная.

& , прикрепленный к переменной или выражению ( & v ), указывает ссылку. То есть создать указатель на значение переменной или на поле.

92
ответ дан 26 November 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: