pointer.md 1.6 KB

~={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 = &sum;
	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);
}