Поскольку указатели позволяют вам фактически обращаться к ОЗУ вручную (невозможно на Java или в «безопасном» C#), и они позволяют вам контролировать, как распределяются вещи.
Переменные, которые «удерживают» объекты на C# и Java, действительно содержат указатели (также свободно называемые ссылками) на объекты в памяти, поэтому классы называются «ссылочными типами». Напротив, структуры являются «типами значений», поэтому структурные переменные фактически содержат сами данные. Указатели позволяют динамически распределять и получать доступ к памяти и без каких-либо проверок безопасности со стороны компилятора - они дают вам некоторые потенциальные повышения производительности, но они обременяют вас проверкой кода и обеспечением его правильности.
Причина этого немного тонкая: вам нужны указатели, так как для использования памяти вам нужно знать размер памяти, который вам нужен во время компиляции. Но, конечно же, вы никогда не можете быть уверены, что пользователь не будет пытаться загрузить 100-мегабайтный файл в вашу программу, предназначенную только для обработки 20 МБ, а с другой стороны, вы не можете это зарезервировать с самого начала (подумайте о том, что произойдет, если все зарезервируют все ресурсы). Таким образом, вы просите операционную систему выделить блок памяти для вас и указать адрес своего первого байта, и поэтому нужны указатели. (Есть другие способы использования указателей, таких как файлы и устройства с отображением памяти, но это сделает сообщение более длинным.)
Критически важные приложения, а также приложения, которые полны ошибок, часто используют указатели. :)
См. Http://stackoverflow.com/questions/5727/what-are-the-barriers-to-understanding-pointers-and-what-can-be-done-to-overcome/5754#5754 –
Указатели не поможет Java-программистам ни с чем ... –
Thems fightin 'words – sova