Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 115 116 117 [ 118 ] 119 120 121 ... 210


Массивы можно описывать следующим образом:

тип данных имя массива [размер массива]; Используя имя массива и индекс, можно адресоваться к элементам массива:

имя массива [значение индекса]

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

Вот несколько примеров описания массивов:

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 есть указатель на... .



1 ... 115 116 117 [ 118 ] 119 120 121 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика