C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的有意义的名字。也就是用于重新定义已经存在的变量的名称。
typedef <existing_name> <alias_name>
在以上语法中,“ existing_name”是已经存在的变量的名称,而“ alias_name”是给现有变量赋予的另一个名称。
例如,假设我们要创建一个类型为unsigned int的变量,那么如果我们要声明此类型的多个变量,那么它将变得很繁琐。为了克服这个问题,我们使用typedef关键字。
typedef unsigned int unit;
在上面的语句中,我们使用typedef关键字声明了unsigned int类型的unit变量。
现在,我们可以通过编写以下语句来创建unsigned int类型的变量:
unit a, b;
而不是写:
unsigned int a, b;
您应该已经观察到typedef关键字通过为已经存在的变量,提供代替名称来提供简化的快捷方式。当我们处理长数据类型(尤其是结构声明)时,此关键字很有用。
让我们通过一个简单的实例来理解。
#include <stdio.h> int main() { typedef unsigned int unit; unit i,j; i=10; j=20; printf("i值为 :%d",i); printf("\nj值为 :%d",j); return 0; }
输出结果
i值为 :10 j值为 :20
以下为结构声明:
struct student { char name[20]; int age; }; struct student s1;
在上面的结构声明中,我们通过编写以下语句创建了学生类型的变量:
struct student s1;
上面的语句显示创建了变量s1,但是该语句相当长。为了避免这么大的声明,我们使用typedef关键字,创建类型为student的变量。
struct student { char name[20]; int age; }; typedef struct student stud; stud s1, s2;
在上面的声明中,我们声明了struct student类型的变量stud。现在,我们可以在程序中使用stud变量来创建struct student类型的变量。
上面的typedef可以写成:
typedef struct student { char name[20]; int age; } stud; stud s1,s2;
从上面的声明中,我们得出结论,typedef关键字减少了代码的长度和数据类型的复杂性。它还有助于理解程序。
让我们看另一个示例,在其中使用typedef结构声明。
#include <stdio.h> typedef struct student { char name[20]; int age; }stud; int main() { stud s1; printf("输入学生s1的详细信息: "); printf("\n输入学生姓名:"); scanf("%s", &s1.name); printf("\n输入学生年龄:"); scanf("%d", &s1.age); printf("\n 学生姓名 : %s", s1.name); printf("\n 输入学生年龄 : %d", s1.age); return 0; }
输出结果
输入学生s1的详细信息: 输入学生姓名: Peter 输入学生年龄: 28 学生姓名 : Peter 学生年龄 : 28
我们也可以借助typedef为指针变量提供另一个名称或别名。
例如,我们通常声明一个指针,如下所示:
int* ptr;
我们可以重命名上述指针变量,如下所示:
typedef int* ptr;
在上面的语句中,我们声明了int *类型的变量。现在,我们只需使用' ptr'变量即可创建int *类型的变量,如以下语句所示:
ptr p1, p2 ;
在上面的语句中,p1和p2是' ptr'类型的变量。