2011-01-29 4 views
0

Я программист C#/java и не очень много играл с указателями. Мне просто интересно, это то, что достаточно полезно для изучения.Какова цель использования указателей?

Может кто-нибудь объяснить, почему и что именно указатели помогут C#/java-программистам?

+3

См. Http://stackoverflow.com/questions/5727/what-are-the-barriers-to-understanding-pointers-and-what-can-be-done-to-overcome/5754#5754 –

+0

Указатели не поможет Java-программистам ни с чем ... –

+1

Thems fightin 'words – sova

ответ

3

Вы уже используете указатели постоянно. Каждая не примитивная переменная в Java (и, предположительно, также C#, хотя я менее знаком с ней) является указателем на объект.

Возможно, вы хотите получить информацию о pointer arithmetic?

+1

+1 Да, вы все время используете указатели на Java и C#. Переменные типа 'Object' фактически являются указателями на экземпляр объекта в памяти. Эти языки просто используют умные абстракции, чтобы скрыть подробности о «указателях» от вас. Понимание того, как работают указатели *, скорее всего, будет очень образованным. Что касается их практической полезности в Java или C#? Ограниченное. Там вообще другой способ. –

+0

Может ли кто-нибудь из вас предоставить более подробную информацию о том, что происходит под капотом, в очень базовом смысле? Я хотел бы знать, стоит ли брать эту «образовательную» задачу ... – locoboy

+0

Я хотел сказать, что если вы знаете, как манипулировать объектами в Java/C#, то на каком-то уровне вы уже знаете * о указателях, поскольку указатели - это то, как вы ссылаетесь на объекты на этих языках. Это поможет, если вы уточните в своем вопросе, что именно вы чувствуете, что не понимаете о указателях. –

2

Поскольку указатели позволяют вам фактически обращаться к ОЗУ вручную (невозможно на Java или в «безопасном» C#), и они позволяют вам контролировать, как распределяются вещи.

Переменные, которые «удерживают» объекты на C# и Java, действительно содержат указатели (также свободно называемые ссылками) на объекты в памяти, поэтому классы называются «ссылочными типами». Напротив, структуры являются «типами значений», поэтому структурные переменные фактически содержат сами данные. Указатели позволяют динамически распределять и получать доступ к памяти и без каких-либо проверок безопасности со стороны компилятора - они дают вам некоторые потенциальные повышения производительности, но они обременяют вас проверкой кода и обеспечением его правильности.

Причина этого немного тонкая: вам нужны указатели, так как для использования памяти вам нужно знать размер памяти, который вам нужен во время компиляции. Но, конечно же, вы никогда не можете быть уверены, что пользователь не будет пытаться загрузить 100-мегабайтный файл в вашу программу, предназначенную только для обработки 20 МБ, а с другой стороны, вы не можете это зарезервировать с самого начала (подумайте о том, что произойдет, если все зарезервируют все ресурсы). Таким образом, вы просите операционную систему выделить блок памяти для вас и указать адрес своего первого байта, и поэтому нужны указатели. (Есть другие способы использования указателей, таких как файлы и устройства с отображением памяти, но это сделает сообщение более длинным.)

Критически важные приложения, а также приложения, которые полны ошибок, часто используют указатели. :)

1

Я думаю, что, понимая указатели, вы лучше поймете, что на самом деле происходит на вашем компьютере, что там происходит и как ваши программы действительно могут работать.

Если вам все равно, и вы просто хотите, чтобы ваши java-программы работали, вы можете пропустить их; в противном случае я думаю, что они помогут вам в программировании.

Смежные вопросы