Массив С (K&R 5.3) состоит из нескольких элементов одного и того же типа данных.
Объявление массива указывает тип данных элементов, за которым следует имя массива, а за ним - квадратные скобки, в которых указано количество элементов в массиве:
Для обращения к элементу массива используется имя массива, за которым следует номер элемента в квадратных скобках. Первый элемент массива имеет номер О. Таким образом, можно инициализировать массив, присваивая значения поочередно каждому его элементу:
Можно также инициализировать массив во время объявления, присваивая ему список значений в фигурных скобках, так же, как и в случае структуры. В таком случае размер массива в объявлении можно опустить, так как неявно он указывается списком значений инициализации (K&R 4.9):
Рис. 1.1.Указатели и присваивание
Интересно, что имя массива является также именем указателя на первый элемент массива. Таким образом, например, имея показанное выше объявление массива, можно использовать arr там, где ожидается значение типа int* (указатель на int). Этот факт является основой некоторых высокоинтеллектуальных идиом языка программирования С, которые вам определенно не требуется знать (именно поэтому я и не рекомендовал вам читать из главы 5 K&R что-либо, кроме первых трех разделов).
Вот пример, в котором массив С может оказаться полезным при программировании для IOS. Функция CGContextStrokeLineSegments объявлена следующим образом:
Вторым параметром функции передается С-массив элементов типа CGPoint (об этом говорят следующие за именем параметра квадратные скобки). Таким образом, для вызова функции необходимо знать, как минимум, как создать такой массив. Это можно сделать, например, с помощью следующего кода:
После этого можно передать аrr в качестве второго аргумента в вызов функции
<Кроме того, как я упоминал, С-строка в действительности представляет собой массив. Например, метод NSString с именем stringWi thUTF8String: получает (согласно документации) "С-массив байтов в кодировке UТF8 с завершающим нулевым символом~ но этот параметр объявлен не как массив, а как char*. Это одно и то же, и оба способа говорят, что данный метод принимает С-строку.
(Двоеточие после имени метода stringWi thUTF8String: - не опечатка; имена многих методов Objective-C заканчиваются двоеточием. Почему - я объясню в главе 3.)