Typedef usage includes: 1. Typedef basic data types take "aliases". All data types in C language can use typedef to redefine type names; 2. Typedef takes "aliases" for custom data types. Customized data types include: structure struct name { };, union unit name { };, enumeration enum { }; 3. Typedef takes "aliases" for arrays; 4. Typedef takes "aliases" for pointers.
#The operating environment of this article: Windows 10 system, C 20 version, dell g3 computer.
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"
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;
int a=2;typedef int* pointer;pointer p;p=&a;
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
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;
The first step: Give the pointer an "alias"
pCopySDMMC2Mem p1;pBL2Type p2;
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
typedef const char* PCHAR;int strcmp(PCHAR, PCHAR);
typedef static int INT_STATIC;
Разница между typedef и #define:
Четыре использования typedef
1) Базовые типы данных Typedef принимают «псевдонимы»
typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
2) typedef принимает «псевдоним» для пользовательского типа данных
К настраиваемым типам данных относятся: структура struct name{ };, имя единицы объединения { };, перечисление enum { };
struct students{ char sex; char name[120]; int ages;};
Обычно используемые методы переопределения имен данных для структур:
struct students{ char sex; char name[120]; int ages;}std;std.name[20]="wujunwu"
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;
эквивалентен:
int a=2;typedef int* pointer;pointer p;p=&a;
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
Указатель функции
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;
Второй шаг: принудительное преобразование типов
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;
Шаг 3. Присвоение значения указателю
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
Ловушки в typedef
Далее рассмотрим простой пример использования typedef, как показано в следующем коде:
typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
В приведенном выше коде «const PCHAR» эквивалентен «const char*»?
Ответ - нет. Причина очень проста. Typedef используется для определения нового псевдонима типа. Он отличается от макроса и не является простой заменой строки. Следовательно, const в «const PCHAR» придает константность всему указателю, который образует постоянный указатель «char* const (постоянный указатель, указывающий на char)». То есть на самом деле это эквивалентно «char* const», а не «const char* (указатель на константу char)». Конечно, также легко сделать const PCHAR эквивалентным const char*, как показано в следующем коде:
typedef const char* PCHAR;int strcmp(PCHAR, PCHAR);
Фактически, всякий раз, когда для указателя объявляется определение типа, оно должно быть в конечном определении типа. name Добавьте константу, чтобы сделать сам указатель константой.
Также важно отметить, что хотя typedef на самом деле не влияет на характеристики хранения объекта, в синтаксисе он по-прежнему является ключевым словом класса хранения, как и такие ключевые слова, как auto, extern, static и Register. . Следовательно, следующий метод объявления невозможен:
typedef static int INT_STATIC;
The above is the detailed content of What are the usages of typedef. For more information, please follow other related articles on the PHP Chinese website!