👆9. Понятие указателя, типизированные и нетипизированные указатели, указатель на функцию.

Использование (назначение) указателей и примеры кода. Размер типа данных указатель. Операции над указателями. Константный указатель, указатель на константу и константный указатель на константу.

Указатель

Указатель – это переменная, значением которой является адрес в памяти. Указатель занимает 4 байта (или иную память равную int) памяти вне зависимости от типа данных, на который указывает.

ptr = &nurse; //указатель на nurse
val = *ptr; //присваивает val значение, хранящееся в ячейке ptr

Висячий указатель - указатель в никуда

Типизированные и нетипизированные указатели

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

Существуют также нетипизированные указатели (void*), способные указывать на любой тип данных.

Указатель на функцию

Указатель на функцию представляет собой переменную, значением которой является адрес функции.

void function (char *);

Тип function() определен как "функция с параметром char * и возвращаемым типом void".

void (*pf)(char *); //pf - указатель на функцию

Операции над/с указателями:

  1. Разыменование (*p) - получение значения по адресу, хранящемуся в ячейке, на которую указывает указатель;

  2. Сложение и вычитание с целыми числами

  3. Операции сравнения (для указателей одного типа)

  4. Присваивание (&a) - взятие адреса переменной

Указатели и константы

Указатель на константу – Значение переменной нельзя изменить через указатель, но можно изменить адрес на который указывает указатель.

Константный указатель может изменять значение по адресу, но не может изменять адрес.

Константный указатель на константу не может изменять ни значение, ни адрес.

int a = 10;
const int *p1 = &a;    //указатель на константу
int const *p2 = &a;    //указатель на константу
*p1 = 20; //ошибка
p2 = 0;   //OK

int *const p3 = &a;    //константный указатель
*p3 = 30; //ОК
p3 = 0;   //ошибка

int const *const p4 = &a; //константный указатель на константу
*p4 = 30; //ошибка
p4 = 0;   //ошибка

Last updated