Преимущества указателей? - PullRequest
       3

Преимущества указателей?

17 голосов
/ 19 декабря 2010

Недавно я проявил интерес к программированию на C, поэтому я взял себе книгу (K & R) и начал изучать.

Исходя из университетского курса по Java (основы), указатели - это совершенно новая глава, и изто, что я читаю в Интернете, это довольно сложная концепция, чтобы разобраться в этом.Перед тем, как перейти к главе, посвященной указателям, у меня сложилось впечатление, что указатели являются основной частью языка Си и обеспечивают большие преимущества.

После прочтения главы и получения базового представления о том, что такое указатели и как они работают, преимущества для меня не очевидны.

Например (пожалуйста, исправьте меня, если я все понял неправильно) во введении указателей в книге K & R говорится, что, поскольку мы вызываем по значению, при передаче переменной в вызове функции мы в значительной степени передаем копию переменной для обработки функции, и поэтому функция не может ничего делатьк исходной переменной, и мы можем преодолеть это с помощью указателей.

В более позднем примере, в котором используется указатель на символ, в книге говорится, что увеличение указателя на символ допустимо, поскольку функция имеет частную копию указателя.Не являются ли «личные копии» причиной для использования указателей?

Полагаю, я немного запутался во всем использовании указателей.Если меня спросят, я могу использовать указатели вместо подписок на массив, например, но я сомневаюсь, что это основное использование указателей.

Программирование на Linux и Open source было основной причиной, по которой я попал в C. Я получил исходный кодиз проекта C для изучения (Geany IDE), и я вижу, что по всему исходному коду используются указатели.

Я также немного поискал по форумам и нашел пару постов с похожими вопросами.Ответ был (я цитирую):

Если вы не знаете, когда следует использовать указатели, просто не используйте их.

Это станеточевидно, когда вам нужно их использовать, каждая ситуация отличается.

Безопасно ли для меня избегать использования указателей в настоящее время и использовать их только в определенных ситуациях (где потребность в указателях будеточевидно?)

Ответы [ 11 ]

0 голосов
/ 19 декабря 2010

Позвольте мне объяснить это более подробно с помощью ссылок на Java (на что указывает ответ @ Greg)

В Java существуют ссылочные типы (т. Е. Ссылка на класс) и типы значений (т. Е. int).).Как и C, Java передается по значению, только .Если вы передаете примитивный тип в функцию, вы фактически передаете значение значения (в конце концов, это «тип значения»), и поэтому любые изменения этого значения внутри этой функции не отражаются в вызывающем коде.Если вы передаете ссылочный тип в функцию, вы можете изменить значение этого объекта, поскольку при передаче ссылочного типа вы передаете ссылку на этот ссылочный тип по значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...