Использование typedef для массива для объявления нового типа
Я знаю, как использовать typedef для определения нового типа (метки).
Например, typedef unsigned char int8
означает, что вы можете использовать "int8" для объявления переменных типа unsigned char.
Однако я не могу понять значение следующего утверждения:
typedef unsigned char array[10]
Означает ли это, что массив имеет тип unsigned char [10]?
В другой части кода этот тип использовался как аргумент функции:
int fct_foo(array* arr)
Есть ли кто-нибудь, кто знаком с этим утверждением?
Ответы
Ответ 1
Означает ли это, что массив имеет тип unsigned char[10]
?
Заменить "из" на "другое имя для", и у вас есть 100% правильный оператор. A typedef
вводит новое имя для типа.
typedef unsigned char array[10];
объявляет array
как другое имя для типа unsigned char[10]
, массив из 10 unsigned char
.
int fct_foo(array* arr)
говорит, что fct_foo
- это функция, которая принимает указатель на массив из 10 unsigned char
в качестве аргумента и возвращает int
.
Без typedef
, который будет записан как
int fct_foo(unsigned char (*arr)[10])
Ответ 2
Что это делает, так это тип данных, называемый array
, который представляет собой массив фиксированной длины из 10 unsigned char
объектов в размере.
Вот аналогичный вопрос SO, который задавал вопрос о том, как сделать массив фиксированной длины, и формат typedef объясняется более подробно.