Ответ 1
Первое объявление сообщает компилятору, что someArray
не менее 100 элементов. Это можно использовать для оптимизации. Например, это также означает, что someArray
никогда не имеет значения NULL.
Обратите внимание, что в стандарте C не требуется, чтобы компилятор диагностировал, когда вызов функции не отвечает этим требованиям (т.е. это молчание undefined).
Второе объявление просто объявляет someArray
(not someArray
elements!) как const, т.е. вы не можете написать someArray=someOtherArray
. Это то же самое, что и параметр char * const someArray
.
Этот синтаксис можно использовать только внутри самого внутреннего []
декларатора массива в списке параметров функции, это не имеет смысла в других контекстах.
Стандартный текст, который охватывает оба вышеуказанных случая, находится в C11 6.7.6.3/7 (был в формате 6.7.5.3/7 на C99):
Объявление параметра как '' массива типа должно быть скорректировано на "квалифицированный указатель на тип", где квалификаторы типа (если они есть) - это те, которые указаны в
[
и]
для вывода типа массива, Если ключевое слово static также появляется внутри[
и]
для вывода типа массива, то для каждого вызова функции значение соответствующего фактического аргумента должно обеспечивать доступ к первому элементу массива, по крайней мере, как многие элементов, указанных выражением размера.