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

Кочан Стивен

Шрифт:

Отметим, что определение структуры данных представлено в первую очередь и вне какой-либо функции. Определения структур данных действуют аналогично переменным. Если структура определена внутри какой-либо функции, только эта функция «знает» о ее существовании, и тогда это локальное определение структуры. Если структура определена вне любой функции, это определение является глобальным. Глобальное определение структуры позволяет объявлять любые последующие переменные (внутри или вне функции) как структуру этого типа. Определения структур, которые используются в нескольких файлах, обычно централизуются водном header-файле и затем импортируются в те файлы, где нужна эта структура.

Внутри процедуры main объявление struct date dateUpdate (struct date today);

указывает компилятору, что функция dateUpdate принимает в качестве аргумента структуру типа date и возвращает структуру такого же типа. Это объявление не обязательно, поскольку компилятор уже «видел» конкретное объявление функции в этом файле, но принято в практике надежного программирования. Если вы в дальнейшем разделите определение этой функции и main на отдельные исходные файлы, объявление будет необходимо.

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

После ввода даты и ее сохранения в структурной переменной thisDay типа date происходит вызов функции dateUpdate. nextDay = dateUpdate (thisDay);

Здесь происходит вызов функции dateUpdate с передачей этой функции струк-туры даты thisDay.

Внутри функции dateUpdate объявление прототипа int numberOfDays (struct date d);

информирует компилятор Objective-C, что функция numberOfDays возвращает целое значение и принимает один аргумент типа struct date.

Оператор if (today.day != numberOfDays (today))

указывает, что структура today должна передаваться как аргумент функции numberOTOays. Внутри этой функции должно быть соответствующее объявление, информирующее систему, что аргументом должна быть структура, как в следующей строке. int numberOfDays (struct date d)

Сначала в функции numberOfDays нужно выполнить проверку на високосный год и определить, не является ли месяц февралем. Для первой проверки вызы-вается другая функция с именем isLeapYear.

Функция isLeapYear вполне понятна; она проверяет год, содержащийся в структуре типа date, которая передается как аргумент, и возвращает значение YES в случае високосного года или N0 в противном случае.

Вы должны понять иерархию вызовов функций в программе 13.7. функция main вызывает dateUpdate, которая вызывает numberOfDays, которая, в свою очередь, вызывает функцию isLeapYear. Инициализация структур

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

Чтобы инициализировать переменную today структуры типа date, задав зна-чение Июль, 2 число, 20П год, можно использовать оператор struct date today = { 7, 2, 2011 };

Как и при инициализации массива, можно указывать значения не для всех компонентов структуры. Например, в операторе struct date today = {7 };

задается значение 7 для компонента today.month, но не задаются начальные зна-чения для today.day и today.year. В таких случаях начальные значения по умолча-нию не определены.

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

например, struct date today = {.month = 7, .day = 2, .year = 2011 };

и struct date today = {.year = 2011 };

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

Работа с массивами структур не представляет особых сложностей. Например, в struct date birthdays[15];

определяется массив birthdays (дни рождения), содержащий 1 S элементов типа Struct date. Нужный элемент в массиве структур указывается естественным образом. Например, чтобы задать для второго элемента в массиве birthdays дату дня рождения 22 февраля 1996 г., можно написать последовательность birthdays[1].month = 2; birthdays[1]. day = 22; birthdays[1].year = 1996;

Оператор n = numberOfDays (birthdaysfO]);

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

  • Читать дальше
  • 1
  • ...
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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