~={yellow}Важное=~
Если при объявлении указателю не присваивается действительный адрес, то его необходимо обнулить.
// C
char *ptr = NULL;
// C++
char *ptr = nullptr;
Указатели на разные типы данных имеют одинаковый размер, но отличаются длиной арифметического шага. Размер указателей зависит от конкретной архитектуры.
sizeof(char*)
~={yellow}Обобщенный указатель=~ - это указатель на void. Обычно используют для хранения содержимого других указателей без запоминания их типов.
void print_bytes(void* data, size_t length)
{
unsigned char *ptr = data;
}
~={yellow}Указатель на функцию=~
#include <stdio.h>
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}Псевдоним типа для указателей на функции=~
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);
}