2013-05-22 6 views
13

Ich weiß, wie Typedef verwendet, um einen neuen Typ (Label) zu definieren.Mit typedef für ein Array einen neuen Typ zu deklarieren

Zum Beispiel bedeutet typedef unsigned char int8, dass Sie "int8" verwenden können, um Variablen vom Typ unsigned char zu deklarieren.

Allerdings kann ich nicht die Bedeutung des folgenden statment verstehen:

typedef unsigned char array[10] 

das bedeutet Array vom Typ unsigned char [10]?

In anderen Teil des Codes wurde diese Art als Funktion Argument verwendet:

int fct_foo(array* arr) 

Gibt es jemanden, mit dieser Aussage vertraut ist?

+0

Ihre 'int8' geschrieben werden würde dokumentiert die Absicht - Sie werden eine kleine Anzahl werden die Speicherung, sondern als ein Zeichen. Außerdem lautet die Konvention typischerweise "uint8_t", wie in den C99-Typen deklariert. –

Antwort

29

Bedeutet das Array ist vom Typ unsigned char[10]?

ersetzen "von" mit "einen anderen Namen für die" und Sie haben eine 100% korrekte Aussage. A typedef führt einen neuen Namen für einen Typ ein.

typedef unsigned char array[10]; 

erklärt array als ein anderer Name für den Typ unsigned char[10], Array von 10 unsigned char.

int fct_foo(array* arr) 

fct_foo sagt, ist eine Funktion, die einen Zeiger auf ein Feld von 10 unsigned char als ein Argument nimmt, und gibt eine int.

Ohne die typedef, die als

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

Und es bedeutet, dass innerhalb der Funktion 'fct_foo' das Array mit' (* arr) [i] 'verwendet werden muss, um zB das' i'te Zeichen im Array zu erhalten. –

+0

@Daniel Fischer: Was wäre der Argumenttyp, wenn obige Funktion als 'int fct_foo (array arr)' deklariert ist. ? Ich bin hier ein bisschen verwirrt. – Shivakumar

+0

@Shivakumar Selben, als ob Sie es 'int fct_foo (unsigned char arr [10])' 'deklariert haben, wird der Array-Typ als Funktionsargument in einen Zeigertyp konvertiert, so dass die Funktion' int fct_foo (unsigned char * arr) '. –

4

Das bewirkt, dass ein Datentyp namens array ein Array fester Länge von 10 unsigned char Objekten in der Größe ist.

Here is a similar SO question, die gefragt wurde, wie man ein Array mit fester Länge ausführt, und dieses Typedef-Format wird ausführlicher erläutert.

Verwandte Themen