ЭТА ПОЧТА ТЕПЕРЬ ЖИВЕТ В МОЕМ БЛОГЕ:

Http://lee.earth/posts/c-pointer-syntax-in-plain-english/

В этом посте мы рассмотрим некоторый синтаксис языка C, связанный с указателями. Указатели - это переменные, которые содержат адрес места в памяти. Одно из основных применений указателей - передача значений переменных между функциями. Без указателей мы могли бы передавать только копии значений переменных между функциями (только для чтения) в наших программах на C, и это очень ограничивает.

Прежде чем мы исследуем синтаксис указателей в C, важно знать, что указатель на самом деле не существует сам по себе. Указатель должен быть привязан к типу данных. Мы не должны говорить «P - указатель», а вместо этого говорить «P - указатель на (n) _____» (заполните пустое поле типом данных).

Вот простая декларация:

int * p;

«Я объявляю переменную с именем’ p ’. Это указатель на целое число ».

int n = 100;

«Я объявляю переменную с именем’ n ’. Это целое число. Его значение - 100 ».

p =

«Я назначаю адрес памяти 'n' переменной-указателю 'p'. P теперь указывает на адрес «n» »

Пока что мы объявили наш указатель p и целое число n. Теперь мы установили p, чтобы указывать на адрес n. & - это символ, обозначающий адрес памяти.

printf («% p \ n», p);

«Выведите адрес n.»

Простой способ отобразить то, что находится «внутри» указателя, - использовать спецификатор формата % p с printf. Это напечатает шестнадцатеричный адрес памяти, который может выглядеть примерно так: 0x7ffcd1adeb34. При отладке программы может быть полезно знать, куда указывают указатели.

*p = 200;

«Перейдите по адресу, на который указывает p, и введите в него значение 200».

В этом контексте * p = 200 будет называться разыменованием. Теперь у нас есть контроль над значением n. Здесь указатели могут быть очень мощными. Мы можем записать значение (даже если оно находится за пределами нашей локальной функции) по любому адресу памяти.

char * str;

«Я объявляю переменную под названием« str ». Это указатель на символ ».

char * str = «Привет»

«Я назначаю символы« H »,« e »,« l »,« l »,« o »и« \ 0 »переменной« str ».

Это также можно было бы записать как: char str [6] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\ 0’};

‘\ 0’ известен как нулевой байт. Это символ со значением ASCII, равным 0. Нулевой байт используется для обозначения конца последовательности символов. Он дает нам знать, когда заканчивается наша «струна».

Под капотом «строка» в C - это просто массив символов, заканчивающийся нулевым байтом.

char c = str [1];

«Я назначаю второй символ в массиве под названием« str »переменной типа« c »».

Один из способов доступа к отдельным элементам массива - использовать скобки рядом с именем переменной. Это известно как «обозначение массива». Внутри скобок вы можете поместить число, это относится к индексу или «позиции» в массиве. Массивы начинаются с 0, поэтому индекс 1 относится ко второму элементу в массиве.

символ c = * (str + 1);

«Я назначаю второй символ в массиве под названием« str »переменной типа« c »».

Этот синтаксис выглядит иначе, чем приведенный выше, но означает то же самое. Это известно как «обозначение указателя».

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

Надеюсь, вы нашли этот пост полезным для понимания синтаксиса указателя C. Если у вас есть какие-либо вопросы, комментарии или предложения, напишите мне в твиттере @eightlimbed.