Что делает дополнительный const для размера массива? И в чем разница, когда я опускаю const?
Ответ 1
int d(const int darg[5])
Значения darg - это указатель на constint.
int e(int earg[const 5])
Значения earg - это указатель const на int. Это функция c99. T A[qualifier-list e] эквивалентен как T * qualifier-list A в объявлении параметра.
И, конечно, (сверху):
int f(const int farg[const 5])
Значения farg - это указатель const на constint.
Ответ 2
Что делает дополнительный const для размера массива?
C11: 6.7.6.3:
Объявление параметра как '' массива типа должно быть скорректировано на '' квалифицированный указатель на тип, где квалификаторы типов (если они есть) - это те, которые указаны в [ и ] вывода типа массива.
Это означает
int f(const int farg[const 5])
будет отрегулирован на
int f(const int *const farg)
И в чем разница, когда я опускаю const?
После пропуски это эквивалентно
int f(const int frag[5]) //or int f(const int frag[])