Вход/Регистрация
Справочное руководство по C++
вернуться

Страустрап Бьярн

Шрифт:

Аналогичное правило действует и для многомерных массивов. Если E - n-мерный массив размера ixjx…xk, то в выражении он преобразуется в указатель на (n-1)-мерный массив размера jx…xk. Если к этому указателю явно или неявно в результате индексации применяется операция *, указуемый (n-1)-мерный массив сам немедленно преобразуется в указатель.

Например, рассмотрим описание

int x[3][5];

Здесь описан массив из 3×5 целых. Если в выражении появляется x, то оно преобразуется в указатель на первый массив из пяти целых. Если в выражении появляется x[i], что эквивалентно *(x+i), в начале x преобразуется в указатель, как было сказано выше, затем x+i преобразуется к типу x, для чего необходимо i умножить на размер объекта, на который указывает x, т.е. на размер пяти целых. Затем происходит сложение и применяется косвенность, после чего получим массив (из пяти целых), который в свою очередь преобразуется в указатель на первое из целых. Если есть еще одна индексация, процесс повторяется, и на этот раз мы получим в результате целое.

Из всего этого следует, что массивы в C++ хранятся по строкам (последний индекс изменяется быстрее всего), а значение первого индекса из описания позволяет вычислить размер памяти, необходимой для массива, однако при вычислении индексного выражения первый индекс роли не играет.

R.8.2.5 Функции

В описании T D, в котором D имеет вид

D1 ( список-описаний-параметров ) список-спецификаций-cv opt

описываемый идентификатор имеет тип "…список-спецификаций-cv функция с параметрами типа список-описаний-параметров возвращающая T".

список-описаний-параметров:

 список-описаний-парам opt … opt

 список-описаний-парам , …

список-описаний-парам:

 описание-параметра

 список-описаний-парам , описание-параметра

описание-параметра:

 спецификации-описания описатель

 спецификации-описания описатель = выражение

 спецификации-описания абстрактный-описатель opt

 спецификации-описания абстрактный-описатель opt = выражение

Если список-описаний-параметров завершается эллипсисом (…), про число параметров известно только то, что оно больше или равно числа заданных параметров, если список параметров пуст, то функция параметров не имеет. Список параметров void эквивалентен пустому списку параметров. Не считая этого случая, void не может быть типом параметра (хотя типы, получаемые из void, такие как void*, допустимы).

R.8.3 Определения функций

Определения функций имеют вид

определение-функции:

 спецификации-описания opt описатель инициализатор-ctor тело-функции

тело-функции:

 составной-оператор

Конструкция описатель из определения-функции должна содержать описатель вида

D1 ( список-описаний-параметров ) список-спецификаций-cv opt

в соответствии с определениями из §R.8.2.5.

Формальные параметры относятся к области видимости самого большого блока тела-функции.

Приведем пример полного определения функции.

int max(int a, int b, int c)

{

 int m = (a › b) ? a : b;

 return (m › c) ? m : c;

}

Здесь int представляет спецификации-описания, max(int a, int b, int c) - описатель, а {/*… */} - тело-функции.

Конструкция инициализатор-ctor используется только в конструкторах, см. §R.9.3.1 и §R.12.6.

Конструкция список-спецификаций-cv может участвовать: в описании нестатической функции-члена, в определении нестатической функции-члена или в описании указателя на функцию-член, см. §R.9.3.1. Она относится к типу функции.

Отметим, что неиспользуемым формальным параметрам имена можно не давать, например,

void print(int a, int)

{

 printf("a = %d\n",a);

}

R.8.4 Инициализаторы

За описателем может идти начальное значение описываемого идентификатора.

инициализатор:

 = выражение-присваивания

 = { список-инициализаторов , opt }

 ( список-выражений )

список-инициализаторов:

 выражение-присваивания

 список-инициализаторов, выражение-присваивания

 { список-инициализаторов , opt }

Автоматические, регистровые, статические и внешние переменные можно инициализировать произвольными выражениями, содержащими константы и описанные ранее переменные и функции.

  • Читать дальше
  • 1
  • ...
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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