Чтение онлайн

ЖАНРЫ

Программирование на Objective-C 2.0
Шрифт:

Перед объявлением типа можно дополнительно указать класс памяти, что описывается ниже в разделе «Переменные*. Если указан класс памяти и пере-менная должна иметь тип int, то int можно опустить. Например, static counter;

объявляет counter как переменную static int.

Табл. В.З. Сводка базовых типов данных Тип Описание int Целое значение, то есть значение, не содержащее десятичной точки; имеет точность не менее 32 бит. short int Целое значение, которое занимает половину памяти по сравнению с типом int на некоторых машинах; имеет точность не менее I6 бит. long int Целое значение увеличенной точности; имеет точность не менее 32 бит. long long int Целое значение дополнительно

увеличенной точности; имеет точность не менее 64 бит. unsigned int Положительное целое значение; может содержать положительные значения, вдвое больше, чем int; имеет точность не менее 32 бит. float Значение с плавающей точкой, то есть может содержать знаки после десятичной точки; имеет точность не менее 6 цифр. double Значение с плавающей точкой увеличен ной точности; имеет точность не менее 10 цифр. long double Значение с плавающей точкой дополнительно увеличенной точности; имеет точность не менее 10 цифр. char Значение с одним символом; на некоторых машинах может добавляться знак при использовании в выражении. unsigned char То же самое, что и char, за исключением того, что в случае преобразования в целое значение не будет добавляться знак. signed char То же самое, что и char, за исключением того, что в случае преобразования в целое значение будет добавляться знак. _Bool Булев тип; хранит значение 0 или 1. float _Complex Комплексное число. double _Complex Комплексное число увеличенной точности. long double _Complex Комплексное число дополнительно увеличенной точности. void Не обозначает никакого типа; используется при объявлении функции или метода, не возвращающих никакого значения, или для явной отмены результатов выражения; используется также как обобщенный тип указателя (void *)

Отметим, что модификатор signed можно также указывать перед типами short irrt, int, long int и long long int. Поскольку эти типы всегда используются со знаком, модификатор не оказывает на них дополнительного влияния.

Типы данных Complex и .Imaginary позволяют объявлять комплексные и мнимые числа и работать с ними с помощью функций из библиотеки, поддерживающей арифметические операции с этими типами. Обычно следует включать в свою программу файл , где определяются макросы и объявляются функции для работы с комплексными и мнимыми числами. Например, переменную d типа double .Complex можно объявить и инициализировать со значением 5 + 10.5i с помощью оператора double .Complex cl = 5 + 10.5 * I;

Затем можно использовать библиотечные процедуры creal и cimag для извлечения вещественной и мнимой частей d соответственно.

Используемая реализация не обязательно поддерживает типы Complex и Jmaginary. Она может поддерживать один тип и не поддерживать другой. Производные типы данных

Производный (derived) тип данных формируется из одного или нескольких базовых типов данных. Производными типами данных являются массивы, структуры, объединения и указатели (включая объекты). Функция или метод, которые возвращают значение указанного типа, также считаются производным типом данных. Функции и классы описываются по отдельности соответственно в разделах «Функции» и «Классы». Массивы Одномерные массивы

В определении массива может содержаться любой базовый тип данных или любой производный тип данных. Массивы функций не допускаются (хотя разрешается использовать массивы указателей на функции).

Объявление массива имеет следующий основной формаi. тип имя[n] = { Выражение инициализации, Выражение_инициализации, ..);

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

Если определяется

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

Особым случаем инициализации массива являются массивы символов, ко-торые можно инициализировать с помощью константной символьной строки. Например, char today(] = "Monday";

объявляет today как массив символов. Элементы этого массива инициализируются в виде начальных значений соответственно символами 'М'.'о', 'n', 'd', 'а', 'у' и '\0\

Если объявить явным образом размер массива, не оставив элемента для конечного нуль-символа, то компилятор не поместит нуль-символ в конце массива. char today[6] = "Monday";

В этом объявлении today является массивом из шести символов, и его эле-ментам присваиваются соответственно символы ’М\ 'o', *n', ЧГ, 'а' и ’у’.

Указывая элементы в прямоугольных скобках, можно инициализировать конкретные элементы массива в любом порядке. Например, ниже объявляется массив из Ю элементов с именем а (число элементов массива определяется элементом с максимальным указанным номером), а также задается начальное значение х + 1 (1234) для последнего элемента и значения 1,2,3 соответственно для первых трех элементов. int х = 1233; int а[] = { |9] = х + 1, [2] = 3, [1] = 2, [0] = 1 }; Массивы переменной длины

Внутри функции, метода или блока можно задать размер массива, используя выражение, содержащее переменные. В этом случае размер вычисляется на этапе выполнения. Например, функция int makeVals (int n) { int valArray[n]; }

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

Объявление многомерного массива имеет основной формат тип имя[n] = [d1][d2]...[dn] = списокИнициализации

Здесь определяется, что массив с этим именем содержит dl xd2x...x dn эле-ментов указанного типа. Например, int three_d [5] [2] [20];

определяет трехмерный массив three_d, содержащий 200 целых элементов.

Отдельный элемент многомерного массива указывается набором индексов каждой размерности, каждый из которых заключен в отдельные прямоуголь-ные скобки. Например, выражение three.d [4][0][15] = 100;

присваивает значение 100 указанному элементу массива three_d.

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

Ниже матрица определяется как двумерный массив, содержащий четыре строки и три столбца. int matrix[4][3] = {{1,2,3}, { 4, 5, 6 }, { 7, 8, 9 } };

Элементам первой строки матрицы присваиваются соответственно значе-ния 1,23; элементам второй строки — 4,5,6; и элементам третьей строки — 7, 8, 9. Элементам четвертой строки присваивается значение 0, поскольку для этой строки значения не заданы. Объявление int matrix[4][3] = { 1,2, 3, 4, 5, 6, 7, 8,9};

инициализирует матрицу, содержащую те же значения, поскольку элементы многомерного массива инициализируются в порядке размерностей, то есть от левой размерности к правой. Объявление int matrix[4][3] = {1}, {4}, {7}};

присваивает 1-му элементу 1-й строки матрицы значение 1, 1-му элементу 2-й строки - значение 4 и I -му элементу 3-й строки - значение 7. Всем остальным элементам присваивается по умолчанию значение 0.

И, наконец, объявление int matrix[4][3] = {[0][0] = 1, [1][1] = 5, [2][2] = 9};

Поделиться с друзьями: