2015-02-11 2 views
3

Я читал на веб-сайте golang, что uintptr хранит неинтерпретированные биты значения указателя, вид anwsers, который я нашел в Интернете, был очень запутанным. Кто-то, пожалуйста, объясните это мне простыми словами.Что это значит, когда мы говорим, что uintptr хранит неинтерпретированные биты значения указателя?

ответ

5

Короткий ответ: он используется, когда вам нужно использовать адрес, как будто это номер.

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

Но иногда, когда вы работаете со встроенными системами или какие-то низкоуровневые библиотеки, где вам нужно чтобы добавить или вычесть из адреса, вам нужно сказать Go, что он не должен проверять этот указатель, потому что он не указывает на что-либо полезное на данный момент. Вы просто хотите использовать этот адрес, как если бы это был номер, и добавить/вычесть другое число.

Здесь вы можете использовать uintptr. Этот тип может содержать любое значение указателя (любой адрес), а когда вы вставляете в него адрес, Go не видит его как указатель, поэтому вы можете делать с ним все, что хотите.

+0

Спасибо, это было действительно полезно .. :) –