@ Бо Перссон правильно заявляет в своем великолепном ответе здесь :
================================================
При передаче массива в качестве параметра это
void arraytest(int a[])
означаетточно так же, как
void arraytest(int *a)
================================================
Однако, позвольте мне также добавить, что это:
означает то же самое, что и
void arraytest(int a[0])
, что означает точнотакой же, как
void arraytest(int a[1])
, что означает точно такой же, как
void arraytest(int a[2])
, что означает точно такой же, как
void arraytest(int a[1000])
и т. д.
Фактически, значение "size" внутри параметра массива здесь, по-видимому, просто для эстетических целей / целей самодокументирования и может быть любым положительным целым числом (я думаю, типа * 1031), которое вы хотите!
На практике, однако, вы должны использовать его, чтобы указать минимальный размер массива, который вы ожидаете получить от функции, чтобы при написании кода было легко отслеживать и проверять. Стандарт MISRA-C-2012 ( купить / скачать PDF-версию стандарта 236-pg 2012 года за 15 фунтов стерлингов здесь ) доходит до того, что заявляет:
Правило 17.5 Аргумент функции, соответствующий параметру, объявленному как имеющий тип массива, должен иметь соответствующее количество элементов.
...
Еслипараметр объявляется как массив с указанным размером, соответствующий аргумент в каждом вызове функции должен указывать на объект, который имеет как минимум столько же элементов, сколько массив.
...
Использование декларатора массива для параметра функции определяет интерфейс функции более четко, чем использование указателя.Минимальное количество элементов, ожидаемое функцией, указано явно, тогда как это невозможно с указателем. [выделение добавлено]
Другими словами, они рекомендуют использовать явный формат размера,несмотря на то, что стандарт C технически не обеспечивает его соблюдения - , по крайней мере, он помогает вам как разработчику и другим, использующим код, определить размер массива, который ожидает от вас функция.