|
Программирование >> Перегруженные имена функций и идентификаторы
Массивы можно описывать следующим образом: тип данных имя массива [размер массива]; Используя имя массива и индекс, можно адресоваться к элементам массива: имя массива [значение индекса] Значения индекса должны лежать в диапазоне от нуля до величины, на единицу меньшей, чем размер массива, указанный при его описании. Вот несколько примеров описания массивов: char name [ 20 ]; int grades [ 125 ]; float income [ 30 ]; double measurements [ 1500 ]; Первый из массивов (name) содержит 20 символов. Обращением к элементам массива может быть name [0], name [1], name [19]. Второй массив (grades) содержит 125 целых чисел. Обращением к элементам массива может быть grades [0], grades [1], grades [124]. Третий массив (incom) содержит 30 вещественных чисел. Обращением к элементам массива может быть income [0], incom [1], income [29]. Четвертый массив (measurements) содержит 1500 вещественных чисел с двойной точностью. Обращением к элементам массива может быть measurements [0], measurements [1], measurements [1499]. Вот программа, иллюстрирующая использование массивов (Файл array.c): #include <stdio.h> #define size 1000 int data [size]; main ( ) { extern float average (int a[], int s ); int i; for ( i=0; i<size ; data [ i ]= i; printf ( \nСреднее значение массива data =%f\n ,average (data,size)); float average (int a[ ] ,int s ) float sum=0.0; int i; for ( i=0; i<s ; i ++) sum+=a[ i ]; return sum/s; В программе заводится массив на 1000 цел1х чисел. При помощи функции average подсчитывается сумма элементов этого массива. Первым формальным параметром функции average является массив. В качестве второго параметра функции передается число суммируемых значений в массиве a. Обратите внимание на использование константы size (размер). Если изменяется размерность массива, задаваемая этой константой, то это не приводит к необходимости менять что-либо в самом коде программы. Трюки программирования Правило право-лево Существенный принцип анализа сложных синтаксических конструкций языка, вроде указатель на функцию, возвращающую указатель на массив из трёх указателей на функции, возвращающие значение int чётко формализован в виде правила право-лево . Всё предельно просто. Имеем: () - функция, возвращающая... [] - массив из... * - указатель на... Первым делом находим имя, от которого и будем плясать. Следующий шаг - шаг вправо. Что там у нас справа? Если (), то говорим, что Имя есть функция, возвращающая... . (Если между скобок что-то есть, то Имя есть функция, принимающая то, что между скобок, и возвращающая... ). Если там [], то Имя есть массив из... . И подобным вот образом мы идём вправо до тех пор, пока не дойдём до конца объявления или правой ) скобки. Тут тормозим... ...и начинаем танцевать влево. Что у нас слева? Если это что-то не из приведенного выше (то есть не (), [], *), то попросту добавляем к уже существующей расшифровке. Если же там что-то из этих трёх символов, то добавляем то, что написано выше. И так танцуем до тех пор, пока не дотанцуем до конца (точнее - начала объявления) или левой ( скобки. Если дошли до начала, то всё готово. А если дошли до ( , то по уже означенной итеративности переходим к шагу Пляски вправо и продолжаем. Пример: int (*(*(*fptr)())[3])(); Находим имя и записываем fptr есть... . Шаг вправо, но там ) , потому идём влево: int (*(*(*fun)())[3])(); и получаем fptr есть указатель на... .
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |