Введение в указатели C

Введение в указатели C

Указатели - одна из самых запутанных / сложных частейC, я считаю. Особенно, если вы новичок в программировании, но также если вы пришли из языка программирования более высокого уровня, такого как Python или JavaScript.

В этом посте я хочу представить их в простейшем, но не слишком упрощенном виде.

Указатель - это адрес блока памяти, который содержит переменную.

Когда вы объявляете целое число следующим образом:

int age = 37;

Мы можем использовать&оператор для получения значения адреса в памяти переменной:

printf("%p", &age); /* 0x7ffeef7dcb9c */

Я использовал%pформат, указанный вprintf()для печати значения адреса.

Мы можем присвоить адрес переменной:

int *address = &age;

С помощьюint *addressв объявлении мы объявляем не целочисленную переменную, а скорееуказатель на целое число.

Мы можем использовать оператор указателя*чтобы получить значение переменной, на которую указывает адрес:

int age = 37;
int *address = &age;
printf("%u", *address); /* 37 */

На этот раз мы снова используем оператор указателя, но поскольку на этот раз это не объявление, это означает «значение переменной, на которую указывает этот указатель».

В этом примере мы объявляемageпеременная, и мы используем указатель для инициализации значения:

int age;
int *address = &age;
*address = 37;
printf("%u", *address);

При работе с C вы обнаружите, что многие вещи построены на основе этой простой концепции, поэтому убедитесь, что вы немного ознакомились с ней, запустив приведенные выше примеры самостоятельно.

Указатели - отличная возможность, потому что они заставляют задуматься об адресах памяти и о том, как организованы данные.

Массивыявляются одним из примеров. Когда вы объявляете массив:

int prices[3] = { 5, 4, 3 };

Вpricesпеременная фактически является указателем на первый элемент массива. Вы можете получить значение первого элемента, используя этоprintf()функция в этом случае:

printf("%u", *prices); /* 5 */

Замечательно то, что мы можем получить второй элемент, добавив 1 кpricesуказатель:

printf("%u", *(prices + 1)); /* 4 */

И так далее для всех остальных значений.

Мы также можем выполнять множество хороших операций по манипулированию строками, поскольку строки - это внутренние массивы.

У нас также есть много других приложений, в том числе передача ссылки на объект или функцию, чтобы не тратить больше ресурсов на их копирование.

Скачать мою бесплатнуюСправочник C


Больше уроков по clang: