Указатели

Указатели являются наиболее фундаментальным понятием в языке программирования Си.

Указатель - это просто адрес фрагмента данных в памяти.

Использование указателей в памяти

Получение адреса переменной

Узнать местоположение переменной в памяти можно используя оператор &


int x = 4;
printf( "x находится по адресу %p\n", &x );

Получив адрес переменной, вы, вероятно, захотите сохранить его где-нибудь. Чтобы это сделать, вам потребуется указатель, или ссылочная переменная. Это обычная переменная, которая хранит адрес в памяти. При объявлении необходимо сообщить, данные какого типа хранятся по адресу, на который указывает данная переменная.

int *address_of_x = &x; // Это указатель с адресом по которому хранится целое число.

Считывание содержимого, хранящегося по адресу

Если вы знаете адрес в памяти, то с помощью оператора * вы сможете прочитать данные, которые храняться по этому адресу:

int value_stored = *address_of_x;

Операторы & и * прямо противоположны. Первый берёт фрагмент данных и сообщает адрес, по которому они хранятся; второй берёт заданный адрес и сообщает, какие данные там находятся. Иногда указатели называют ссылками, а оператор * - оператором разыменовывания.

Изменение содержимого, хранящегося по адресу

Если у вас есть ссылочная переменная и вы хотите изменить данные по адресу, на который она указывает, то вы снова можете воспользоваться оператором *. Но на этот раз его нужно использовать в левой части операции присваивания:

*address_of_x = 99;