Основы
Указатели удивительные. 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, позволяющий вызываемой функции изменять переменные в вызывающей функции.