2013-05-22 10 views
13

Wiem, jak używać polecenia typedef w celu zdefiniowania nowego typu (etykiety).Użycie polecenia typeedef dla tablicy w celu zadeklarowania nowego typu

Na przykład typedef unsigned char int8 oznacza, że ​​można użyć "int8" do zadeklarowania zmiennych typu unsigned char.

Jednak nie mogę zrozumieć sens następującym statment:

typedef unsigned char array[10] 

Czy to znaczy, tablica jest typu unsigned char [10]?

W drugiej części kodu, ten typ był używany jako argument funkcji:

int fct_foo(array* arr) 

Czy jest ktoś, kto jest zaznajomiony z tym stwierdzeniem?

+0

plik 'int8' dokumentuje intencję - będziesz przechowywania małych liczb, zamiast znaku. Zwykle konwencją jest 'uint8_t' jak zadeklarowano w typach C99. –

Odpowiedz

29

Czy to oznacza, że ​​tablica jest typu unsigned char[10]?

Wymień "z" z "inna nazwa" i masz 100% poprawne stwierdzenie. A typedef wprowadza nową nazwę dla typu.

typedef unsigned char array[10]; 

deklaruje array jako inna nazwa rodzaju unsigned char[10], array 10 unsigned char.

int fct_foo(array* arr) 

mówi fct_foo to funkcja, która pobiera wskaźnik do tablicy 10 unsigned char jako argument i zwraca int.

Bez typedef, które mogłyby być napisane jak

int fct_foo(unsigned char (*arr)[10]) 
+6

Oznacza to, że w ramach funkcji 'fct_foo', tablica będzie musiała być używana z' (* arr) [i] ', na przykład, aby uzyskać znak' i'th w tablicy. –

+0

@ Daniel Fischer: jaki byłby typ argumentu, jeśli powyższa funkcja jest zadeklarowana jako 'int fct_foo (array arr) '. ? Jestem trochę zdezorientowany. – Shivakumar

+0

@Shivakumar Tak samo, jakbyś zadeklarował 'int fct_foo (unsigned char arr [10])', jako argument funkcji typ tablicy jest konwertowany na typ wskaźnika, więc efektywnie funkcja jest deklarowana 'int fct_foo (unsigned char * arr) '. –

4

Co to oznacza, że ​​typ danych o nazwie array jest macierzą o stałej długości wynoszącej 10 unsigned char obiektów.

Here is a similar SO question to było pytanie, jak zrobić ustaloną długość tablicy, a format typedef został wyjaśniony bardziej szczegółowo.

Powiązane problemy