Die Verwendung von Typedef ist: 1. Typedef-Basisdatentypen verwenden „Aliase“. Alle Datentypen in der C-Sprache können Typedef verwenden, um den Typnamen neu zu definieren. 2. Typedef verwendet „Aliase“ für benutzerdefinierte Daten Typen. ", die benutzerdefinierten Datentypen umfassen: Struktur Strukturname { };, Union Unit Name { };, Enumeration Enum { }; 3. Typedef verwendet „Alias“ für Array; 4. Typedef verwendet „Alias“ für Zeiger.
Die Betriebsumgebung dieses Artikels: Windows 10-System, C++ 20-Version, Dell G3-Computer.
In praktischen Anwendungen hat Typedef hauptsächlich die folgenden vier Verwendungszwecke:# 🎜 🎜#
typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
struct students{ char sex; char name[120]; int ages;};
#🎜🎜 #4) typedef nimmt einen „Alias“ für den Zeiger
struct students{ char sex; char name[120]; int ages;}std;std.name[20]="wujunwu"ist äquivalent zu:
struct students{ char sex; char name[120]; int ages;};typedef struct students std;std.name[20]="wujunwu"
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
int a=2;int* pointer;pointer =&a;Tatsächlich führt das obige Programm zwei Schritte aus:
int a=2;typedef int* pointer;pointer p;p=&a;#🎜 🎜#Schritt zwei: Erzwungene Typkonvertierung
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
Schritt drei: Weisen Sie dem Zeiger einen Wert zu#🎜🎜 #
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;Zusammenfassung: Bei Verwendung von typedef erstellt typedef keinen neuen Typ, sondern stellt lediglich einen „Alias“ für einen vorhandenen Typ zur Verwendung im Programm bereit.
Sehen Sie sich als Nächstes ein einfaches Beispiel für die Verwendung von typedef an, wie im folgenden Code gezeigt:
pCopySDMMC2Mem p1;pBL2Type p2;#🎜 🎜#Entspricht „const PCHAR“ im obigen Code „const char*“? Die Antwort ist nein. Der Grund ist einfach. Typedef wird zum Definieren eines neuen Alias eines Typs verwendet. Es unterscheidet sich von einem Makro und ist kein einfacher String-Ersatz. Daher verleiht die Konstante in „const PCHAR“ dem gesamten Zeiger selbst Konstanz, was den Konstantenzeiger „char* const (ein konstanter Zeiger, der auf char zeigt)“ bildet. Das heißt, es entspricht tatsächlich „char* const“ und nicht „const char* (Zeiger auf Konstante char)“. Natürlich ist es auch einfach, const PCHAR äquivalent zu const char* zu machen, wie im folgenden Code gezeigt:
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;Tatsächlich sollte jedes Mal, wenn Sie eine Typedef für einen Zeiger deklarieren, diese im sein final Typedef fügt dem Namen eine Konstante hinzu, sodass der Zeiger selbst konstant ist. Es sollte auch beachtet werden, dass typedef zwar keinen wirklichen Einfluss auf die Speichereigenschaften des Objekts hat, aber dennoch ein Schlüsselwort der Speicherklasse in der Syntax ist, genau wie auto, extern, static und register das gleiche. Daher ist die folgende Deklarationsmethode nicht möglich:
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;Der Grund dafür ist, dass mehrere Schlüsselwörter der Speicherklasse nicht deklariert werden können, da typedef bereits die Position des Schlüsselworts der Speicherklasse belegt hat. Dies ist nicht mehr möglich Verwenden Sie in einer Typedef-Deklaration das Schlüsselwort static oder ein anderes Speicherklassenschlüsselwort. Natürlich meldet der Compiler auch einen Fehler. Die Fehlermeldung in VC++2010 lautet beispielsweise „Es können nicht mehrere Speicherklassen angegeben werden.“
(2) typedef wird vom Compiler interpretiert, nicht vom Präprozessor
typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
struct students{ char sex; char name[120]; int ages;};
struct students{ char sex; char name[120]; int ages;}std;std.name[20]="wujunwu"
4) typedef benötigt einen „Alias“ für den Zeiger
#🎜 🎜#Gewöhnlicher Zeigerstruct students{ char sex; char name[120]; int ages;};typedef struct students std;std.name[20]="wujunwu"ist äquivalent zu:
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"Wenn der Datentyp von a char ist, also char a =2; dann #🎜🎜 #
int a=2;int* pointer;pointer =&a;
int a=2;typedef int* pointer;pointer p;p=&a;Tatsächlich führt das obige Programm zwei Schritte aus:
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;Schritt 2: Erzwungene Typkonvertierung
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
pCopySDMMC2Mem p1;pBL2Type p2;Zusammenfassung: Bei Verwendung von typedef ist dies bei typedef der Fall Es wird kein neuer Typ erstellt, sondern nur ein neuer Typ für einen bestimmten Typ. Stellt einen „Alias“ für einen vorhandenen Typ zur Verwendung in einem Programm bereit.
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;#🎜 🎜#Entspricht „const PCHAR“ im obigen Code „const char*“?
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;Tatsächlich sollte jedes Mal, wenn Sie eine Typedef für einen Zeiger deklarieren, diese im sein final Typedef fügt dem Namen eine Konstante hinzu, sodass der Zeiger selbst konstant ist. Es sollte auch beachtet werden, dass typedef zwar keinen wirklichen Einfluss auf die Speichereigenschaften des Objekts hat, aber dennoch ein Schlüsselwort der Speicherklasse in der Syntax ist, genau wie auto, extern, static und register das gleiche. Daher ist die folgende Deklarationsmethode nicht möglich:
typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);Der Grund dafür ist, dass mehrere Schlüsselwörter der Speicherklasse nicht deklariert werden können, da typedef bereits die Position des Schlüsselworts der Speicherklasse belegt hat. Sie können dies nicht mehr tun Verwenden Sie in einer Typedef-Deklaration das Schlüsselwort static oder ein anderes Speicherklassenschlüsselwort. Natürlich meldet der Compiler auch einen Fehler. Die Fehlermeldung in VC++2010 lautet beispielsweise „Es können nicht mehrere Speicherklassen angegeben werden.“
Das obige ist der detaillierte Inhalt vonWas sind die Verwendungszwecke von typedef?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!