Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Массивы. Волей разработчиков языка, массивы тесно связаны с указателями





Волей разработчиков языка, массивы тесно связаны с указателями. Объявим, например, массив символов и запишем в него строчку (которая, как вы помните, обязательно неявно заканчивается символом с кодом 0):

 

char s[6] = ”hello”;

// s[0] => ‘h’

// s[1] => ‘e’

// s[2] => ‘l’

// s[3] => ‘l’

// s[4] => ‘o’

// s[5] => 0

char *ptr;

ptr = s;

 

Волей разработчиков языка, имя массива есть указатель на его первый элемент.

 

значение ?             номер 1
номер                      
переменная не занято s[0] s[1] s[2] s[3] s[4] s[5] ptr
тип char char char char char char указатель на char
значение ‘h’ ‘e’ ‘l’ ‘l’ ‘o’   адрес перем. s[0]

 

Поэтому к элементам массива можно обращаться как с помощью обычного синтаксиса имя[индекс], так и используя возможности указателей:

 

s[0] => ‘h’

// *s => ‘h’

// *ptr => ‘h’

s[1] => ‘e’

// *(s+1) => ‘e’

// *(ptr+1) => ‘e’

 

Прибавив к любому из указателей, например, 1, мы заставим этот указатель указывать на следующий символ массива:

 

// *ptr => ‘h’

ptr++;

// *ptr => ‘e’

 

Обратите внимание, что *(s+1) и (*s)+1 – это совсем разные вещи. Почему так?

В первом случае сначала к указателю s будет прибавлена единица, так что s+1 – это указатель на следующий символ за тем, на который указывает s. Следовательно *(s+1) – это сам следующий символ, то есть ‘e’.

Во втором случае, сначала выполнится операция *, а стало быть, *s – это символ ‘h’. А после выполнения операции *, к результату ее будет прибавлена единица. Следовательно символ ‘h’ будет расценен как число 104, и результатом (*s)+1 будет число 105, или символ ‘i':

 

char c;

c = *(s+1)

// c => ‘e’

c = (*s)+1

// c => ‘i’

 

При этом приоритет операций таков, что *s+1 будет расценено как (*s)+1.

Вопросы для самоконтроля







Дата добавления: 2015-08-12; просмотров: 296. Нарушение авторских прав; Мы поможем в написании вашей работы!




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


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Тактические действия нарядов полиции по предупреждению и пресечению групповых нарушений общественного порядка и массовых беспорядков В целях предупреждения разрастания групповых нарушений общественного порядка (далееГНОП) в массовые беспорядки подразделения (наряды) полиции осуществляют следующие мероприятия...

Механизм действия гормонов а) Цитозольный механизм действия гормонов. По цитозольному механизму действуют гормоны 1 группы...

Типовые примеры и методы их решения. Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно. Какова должна быть годовая номинальная процентная ставка...

Выработка навыка зеркального письма (динамический стереотип) Цель работы: Проследить особенности образования любого навыка (динамического стереотипа) на примере выработки навыка зеркального письма...

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

Studopedia.info - Студопедия - 2014-2026 год . (0.014 сек.) русская версия | украинская версия