~={yellow}Важное=~ Если при объявлении указателю не присваивается действительный адрес, то его необходимо обнулить. ```cpp // C char *ptr = NULL; // C++ char *ptr = nullptr; ``` Указатели на разные типы данных имеют одинаковый размер, но отличаются длиной арифметического шага. Размер указателей зависит от конкретной архитектуры. ```c sizeof(char*) ``` ~={yellow}Обобщенный указатель=~ - это указатель на void. Обычно используют для хранения содержимого других указателей без запоминания их типов. ```c void print_bytes(void* data, size_t length) { unsigned char *ptr = data; } ``` ~={yellow}Указатель на функцию=~ ```c #include int sum(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } int main() { int (*func_ptr)(int, int); func_ptr = NULL; func_ptr = ∑ int result = func_ptr(5, 4); func_ptr = &subtract; int result = func_ptr(5, 4); return 0; } ``` ~={yellow}Псевдоним типа для указателей на функции=~ ```c typedef int bool_t; typedef bool_t (*less_than_func_t)(int, int); bool_t less_than(int a, int b) { return a < b ? 1 : 0; } int main(int argc, char ** argv) { less_than_func_t func_ptr = NULL; func_ptr = &less_than; bool_t result = func_ptr(3, 7); } ```