Указатели
Указатели являются наиболее фундаментальным понятием в языке программирования Си.
Указатель - это просто адрес фрагмента данных в памяти.
Использование указателей в памяти
Получение адреса переменной
Узнать местоположение переменной в памяти можно используя оператор &
int x = 4;
printf("x находится по адресу %p\n", &x);
Получив адрес переменной, вы, вероятно, захотите сохранить его где-нибудь. Чтобы это сделать, вам потребуется указатель, или ссылочная переменная. Это обычная переменная, которая хранит адрес в памяти. При объявлении необходимо сообщить, данные какого типа хранятся по адресу, на который указывает данная переменная.
int *address_of_x = &x; // Это указатель с адресом по которому хранится целое число.
Считывание содержимого, хранящегося по адресу
Если вы знаете адрес в памяти, то с помощью оператора * вы сможете прочитать данные, которые храняться по этому адресу:
int value_stored = *address_of_x;
Операторы & и * прямо противоположны. Первый берёт фрагмент данных и сообщает адрес, по которому они хранятся; второй берёт заданный адрес и сообщает, какие данные там находятся. Иногда указатели называют ссылками, а оператор * - оператором разыменовывания.
Изменение содержимого, хранящегося по адресу
Если у вас есть ссылочная переменная и вы хотите изменить данные по адресу, на который она указывает, то вы снова можете воспользоваться оператором *. Но на этот раз его нужно использовать в левой части операции присваивания:
*address_of_x = 99;