Найти в Дзене

Курс по C++ для новичков. Массивы, строки и указатели. Часть 8.

Указатели и массивы Массивы и указатели тесно связаны между собой, для начала рассмотрим следующий фрагмент программы. char str[80]; char *p1; p1 = str; Здесь str - это имя массива, который содержит 80 символов, а p1 указатель на тип char. Во время выполнения третьей строки в указатель p1 присваивается адрес на первый элемент массива str (str[0]). При использовании имени массива без индекса указатель генерирует на первый элемент этого массива. Если вы захотите получить доступ, например, к 5 элементу, то вам нужно использовать одно из следующих выражений str[4] или *(p1+4) В обоих случаях вы обратитесь к 5 элементу (не забывайте, что индексация элементов в массиве начинается с нуля). Круглые скобки использованы по той причине, что оператор "*" имеет более высокий приоритет, чем "+". Часто, вместо индексирования массивов используются указатели на массивы, т.к. обращение к их элементам происходит быстрее, чем при индексации и более компактный код. Чтобы лучше увидеть различие между испо

Указатели и массивы

Массивы и указатели тесно связаны между собой, для начала рассмотрим следующий фрагмент программы.

char str[80];
char *p1;
p1 = str;

Здесь str - это имя массива, который содержит 80 символов, а p1 указатель на тип char. Во время выполнения третьей строки в указатель p1 присваивается адрес на первый элемент массива str (str[0]). При использовании имени массива без индекса указатель генерирует на первый элемент этого массива. Если вы захотите получить доступ, например, к 5 элементу, то вам нужно использовать одно из следующих выражений

str[4]

или

*(p1+4)

В обоих случаях вы обратитесь к 5 элементу (не забывайте, что индексация элементов в массиве начинается с нуля).

Круглые скобки использованы по той причине, что оператор "*" имеет более высокий приоритет, чем "+".

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

-2

Вывод в консоль

-3

Обратите внимание, что здесь мы используем библиотечные функции isupper() и islower(), которые проверяют, в каком регистре буква, а потом, с помощью функций tolower() и toupper() переводят в нужный регистр.

Теперь напишем точно такую же программу, с использованием указателей.

-4

Вывод программы.

-5

Здесь указатель становится в самое начала массива str, далее в каждой итерации он продвигается по каждому элементу, пока не дойдет до нулевого (последнего) элемента, а мы знаем, что 0 это false для цикла.

Подпишитесь на канал, чтобы не потерять курс!

Следующий урок

Предыдущий урок

Список всех уроков курса.