Вход/Регистрация
Программирование на Objective-C 2.0
вернуться

Кочан Стивен

Шрифт:

При условии, что х lvalue-выражение типа t, pt модифицируемое lvalue-выражение типа «указатель на t»; v выражение;

выражение &х дает указатель на х и имеет тип «указатель на t»; pt = &х задает pt как указатель на х и имеет тип «указатель на Ь>; pt = 0 присваивает pt null-указатель; pt == 0 проверяет, является ли pt null-указателем; *pt является ссылкой на значение, указываемое pt и имеет тип t *pt = v сохраняет значение v в том месте, на которое указывает pt, и имеет тип t Указатели на массивы

При условии, что а массив элементов типа t; ра1 модифицируемое lvalue-выражение типа «указатель на t», которое указывает на какой-либо элемент в а; ра2 lvalue-выражение типа «указатель на Ь>, которое указывает на какой-либо элемент в а или на элемент, следующий за последним элементов в а; v выражение; п целое выражение;

выражение a, &a, &a[0] каждое дает указатель на первый элемент; &a[n] создает указатель на элемент с номером n массива а и имеет тип «указатель на t»; *pa1 является ссылкой на элемент, на который указывает pal, и имеет тип «t»; *pa1 = v сохраняет значение v в элементе, на который указывает pal, и имеет тип «t»; ++pa1 задает указатель ра1 на следующий элемент а независимо от типа элементов, содержащихся в а, и имеет тип «указатель на /»; --pa1 задает указатель pal на предыдущий элемента независимо от типа элементов, содержащихся в а, и имеет тип «указатель на i»; *++pa1 увеличивает pal на 1 и затем ссылается назначение в а, на которое указывает pal; имеет тип t, *pa1++ ссылается на значение в а, на которое указывает ра1, прежде чем увеличить ра1 на 1; имеет тип к pa1 + n создает указатель, который указывает в а на n элементов дальше, чем ра1, и имеет тип «указатель на /»; pa1 - n создает указатель, который указывает в а на n элементов ближе, чем ра1, и имеет тип «указатель на /»; *(pa1 + n) = v сохраняет значение v в элементе, на который указывает ра1 + n, и имеет тип « указатель на f»; pa1 < pa2 проверяет, что ра1 указывает в а более ближний элемент, чем ра2; имеет тип int (для сравнения двух указателей можно использовать любые операторы отношения); pa2 - pa1 дает число элементов, содержащихся в а между указателями ра2 и pal (в предположении, что ра2 указывает на элемент, который находится дальше, чем ра1), и имеет значение целого типа; a + n создает указатель на элемент массива а с номером п и имеет тип «указатель на t»; эквивалентно во всех отношениях выражению &а[n]; *(а + n) ссылка на элемент массива а с номером п, имеет тип «fa и эквивалентно во всех отношениях выражению а[п].

Целое значение, получаемое в результате вычитания двух указателей, имеет конкретный тип ptrdiffj, который определен в стандартном header-файле <stddef.h>. Указатели на структуры

При условии, что х модифицируемое lvalue-выражение типа struct s; ps модифицируемое lvalue-выражение типа «указатель на struct ss>; m имя какого-либо компонента структуры s, имеющего тип t; v выражение;

выражение &х дает указатель на х и имеет тип «указатель на struct s»; ре - &х задает ре как указатель па х, имеющий тип «указатель на struct s>>; ps->m является ссылкой на компонент m структуры, указанной с помощью ps, и имеет тип t, (*ps).m тоже является ссылкой на этот компонент и эквивалентно во всех отношениях выражению ps->m; ps->m = v сохраняет значение v в компоненте m структуры, указанной с помо-щью ps, и имеет тип t. Составные литералы

Составной литерал (compound literal) представляет собой имя типа, заключен-ное в круглые скобки, после которого следует список инициализации. В ре-зультате создается неименованное значение указанного типа, область действия которого ограничена блоком, в котором оно создано, или глобальной областью действия, если оно определено вне блока. В последнем случае все инициализаторы должны включать только константные выражения.

Например, (struct point) {.х = 0, .у = 0)

является выражением, которое создает структуру типа struct point с указанными начальными значениями. Его можно присвоить другой структуре типа struct point, например, origin = (struct point) {.x = 0, .у = 0);

Или его можно передать функции или методу, если предполагается, что ар-гумент имеет тип struct point, например, moveToPoint ((struct point) {.x = 0, .у = 0});

Можно также определять типы, отличные от структур. Например, если intPtr имеет тип int *, то оператор intPtr = (int [100]) {[0] = 1, [50] = 50, [99] = 99 };

(который может находиться в любом месте программы) задает intptr, указывающий на массив, содержащий 100 целых элементов, причем первые 3 элемента инициализируются указанным образом.

Если размер массива не задан, он определяется списком инициализации. Преобразование базовых типов данных

Язык Objective-C преобразует операнды арифметических выражений в заранее определенном порядке, который называется обычными арифметическими преобразованиями .

Если один из операндов имеет тип long double, второй операнд преобразуется в long double, таким же будет тип результата.

Если один из операндов имеет тип double, второй операнд преобразуется в double, таким же будет тип результата.

Если один из операндов имеет тип float, второй операнд преобразуется в тип float, таким же будет тип результата.

Если один из операндов имеет тип _Bool, char, short int, является битовым полем типа int или является перечислимым типом данных, то он преобразуется в тип int, если int может полностью представлять его диапазон значений; в противном случае он преобразуется в unsigned int. Если оба операнда имеют одинаковый тип, таким же будет тип результата.

Если оба операнда указаны как signed или оба как unsigned, то целый тип меньшего размера преобразуется в больший целый тип, и таким же будет тип результата.

Если операнд с атрибутом unsigned имеет размер, который не меньше размера операнда с атрибутом signed, то операнд signed преобразуется в тип операнда unsigned, таким же будет тип результата.

Если операнд с атрибутом signed может представлять все значения операнда unsigned, то второй преобразуется в тип первого, если он может полностью представлять весь диапазон его значений, таким же будет тип результата.

Есл и был достигнут этот шаг, то оба операнда преобразуются в тип с атрибутом unsigned, соответствующий типу с атрибутом signed.

  • Читать дальше
  • 1
  • ...
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: