Основы

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

Подробнее

Учтите, что pntr_money — это указатель на целое число, как показано выше. Тогда pntr_money + 1 — это указатель на целое число, непосредственно следующее за целым числом *pntr_money в памяти, а pntr_money - 1 — это указатель на целое число, непосредственно предшествующее *pntr_money.

Давайте рассмотрим машину, которая использует байтовую адресацию, для целого числа требуется 4 байта, а значение pntr_money равно 100 (то есть pntr_money указывает на целое число *pntr_money в ячейке 100).

Еще одна вещь, которую следует помнить, это разница между *pntr_money + 1 и *(pntr_money + 1).

Указатели играют важную роль в передаче параметров функциям. Большинство параметров, передаваемых в функцию, передаются по значению, но если мы хотим изменить значение переданного параметра, мы должны передать адрес параметра, с чем помогают указатели.

Вот пример, чтобы лучше понять -

  • Строка 2 печатает 5.
  • Строка 3 вызывает funct, и переданное значение является значением указателя &x. Это адрес x.
  • Параметр funct — это py типа int *.
  • Строка 7 увеличивает целое число в ячейке py, однако значение py, равное &x, остается прежним. Таким образом, py указывает на целое число x, так что при увеличении *py увеличивается x.
  • Строка 8 печатает 6.
  • Строка 4 также печатает 6.

Следовательно, указатели — это механизм, используемый в C, позволяющий вызываемой функции изменять переменные в вызывающей функции.