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

Использование typedef для массива для объявления нового типа

Я знаю, как использовать typedef для определения нового типа (метки).

Например, typedef unsigned char int8 означает, что вы можете использовать "int8" для объявления переменных типа unsigned char.

Однако я не могу понять значение следующего утверждения:

typedef unsigned char array[10]

Означает ли это, что массив имеет тип unsigned char [10]?

В другой части кода этот тип использовался как аргумент функции:

int fct_foo(array* arr)

Есть ли кто-нибудь, кто знаком с этим утверждением?

4b9b3361

Ответ 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 объясняется более подробно.