logo search
lab_C-08

Другой способ описания типа для аргумента-массива

Чтобы повысить самодокументируемость программ (сделать очевидным, что по смыслу программы аргумент функции принимает массив) в Си предлагается второй способ описания аргументов-массивов:

void f(int a[]); (1)

Однако нужно понимать, что на самом деле это только более удобный для восприятия синтаксис и различия с void f(int *a); чисто внешние. Компилятор, встретив определение аргумента в виде int a[], заменит его на int *a.

По-прежнему при передаче в функцию будет утерян размер фактического массива.

Замечание

Не будет синтаксической ошибкой, если в квадратных скобках указать размер массива — void f(int a[12]). Однако с практической точки зрения для одномерного массива это бесполезно, так как размер учитываться никак не будет.

ЗАДАНИЕ 2 (передача одномерного массива)

1. В функции main определяется и инициализируется массив из нескольких чисел типа double.

Написать функцию total, которой передается массив чисел типа double, Функция суммирует элементы этого массива и возвращает полученную сумму.

Внутри функции размер массива вычислить нельзя. Поэтому при вызове функции total передается не только массив, но и количество элементов в нем.

Чтобы сделать программу более универсальной и не привязывать ее к конкретному размеру, количество элементов массива вычисляется в функции main: с помощью операции sizeof следующим образом: получаем размер памяти, занятой массивом, и делим результат на размер типа double. Затем найденное значение подставляется в вызов функции total.

Вывести на экран:

а) вычисленное количество элементов в массиве,

б) значение полученной суммы чисел.

2. Чтобы убедиться, что компилятор две синтаксические формы определения типа формального параметра воспринимает как одну, использовать в прототипе и определении функции разные способы задания аргумента.