Подтвердить что ты не робот

Const для выражений размера массива в аргументе

У меня есть следующий пример кода C:

int f(const int farg[const 5])
{
}

Что делает дополнительный const для размера массива? И в чем разница, когда я опускаю const?

4b9b3361

Ответ 1

int d(const int darg[5])

Значения darg - это указатель на const int.

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 на const int.

Ответ 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[])

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

int f(const int *farg)