Const для выражений размера массива в аргументе
У меня есть следующий пример кода C:
int f(const int farg[const 5])
{
}
Что делает дополнительный const для размера массива? И в чем разница, когда я опускаю const?
Ответы
Ответ 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)