Другой способ описания типа для аргумента-массива
Чтобы повысить самодокументируемость программ (сделать очевидным, что по смыслу программы аргумент функции принимает массив) в Си предлагается второй способ описания аргументов-массивов:
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. Чтобы убедиться, что компилятор две синтаксические формы определения типа формального параметра воспринимает как одну, использовать в прототипе и определении функции разные способы задания аргумента.