ЭТА ПОЧТА ТЕПЕРЬ ЖИВЕТ В МОЕМ БЛОГЕ:
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.