C中的 Struct 和 Typedef Struct 之间的区别
本篇文章将借助代码示例解释和演示 C 编程中 struct
和 typedef struct
之间的区别。
C中的 struct
使用数组时,我们定义变量的类型,该类型包含许多相同类型/种类的数据项。 类似地,我们在 C 编程中有另一种用户定义的数据类型,称为结构,它可以让我们组合不同类型的数据项。
我们还可以使用结构来表示记录。 例如,我们可以跟踪此人的详细信息,其中每个人都具有以下属性:
- First Name
- Last Name
- Gender
- Age
- Mobile
- Address
C 中 struct 和 typedef struct 的区别
我们可以使用 struct
和 typedef struct
定义结构,但是 typedef
关键字让我们可以为用户定义的数据类型(例如 struct)和原始数据类型(例如 int)编写替代名称。
typedef
关键字为已经存在的数据类型创建一个全新的名称,但不创建新的数据类型。 如果我们使用 typedef struct
,我们可以获得更清晰、更易读的代码,而且它还可以让我们(程序员)免于击键。
typedef
结构可以简化声明变量,提供具有简化语法的等效代码。 但是,它可能会导致更混乱的全局名称空间,这可能会给更广泛的程序带来问题。
让我们为这两种情况(struct
和 typedef struct
)提供一个示例代码,并了解它们之间的区别。
没有 typedef 关键字的示例代码
#include<stdio.h>
struct Books{
int id;
char author[50];
char title[50];
};
int main() {
//declare `book1` and `book2` of type `Books`
struct Books book1;
struct Books book2;
//the specifications for the `book1`
book1.id = 1;
strcpy(book1.author,"Zara Ali");
strcpy(book1.title,"Tutorials for C Programming");
//the specifications for the `book2`
book2.id = 2;
strcpy(book2.author,"Zaid Ali");
strcpy(book2.title,"Tutorials for Java Programming");
//display information for `book1` and `book2`
printf( "The id of book1: %d\n", book1.id);
printf( "The author of the book1: %s\n", book1.author);
printf( "The title of the book1: %s\n", book1.title);
printf( "The id of book2: %d\n", book2.id);
printf( "The author of the book2: %s\n", book2.author);
printf( "The title of the book2: %s\n", book2.title);
return 0;
}
输出结果如下:
The id of book1: 1
The author of the book1: Zara Ali
The title of the book1: Tutorials for C Programming
The id of book2: 2
The author of the book2: Zaid Ali
The title of the book2: Tutorials for Java Programming
上面的代码有两个 Books
类型的变量,book1 和 book2。 如果我们需要声明更多变量,例如 book3、book4 等,我们将不得不一次又一次地键入 struct
。
这就是 typedef
结构出现的地方。 请参阅以下显示 typedef
结构的使用的代码片段。
使用 typedef 关键字的示例代码
我们可以在以下两种方法中使用 typedef
。
方法一:
#include<stdio.h>
struct Books{
int id;
char author[50];
char title[50];
};
typedef struct Books Book;
int main() {
//declare `book1` and `book2` of type `Book`
Book book1;
Book book2;
//the specifications for the `book1`
book1.id = 1;
strcpy(book1.author,"Zara Ali");
strcpy(book1.title,"Tutorials for C Programming");
//the specifications for the `book2`
book2.id = 2;
strcpy(book2.author,"Zaid Ali");
strcpy(book2.title,"Tutorials for Java Programming");
//display information for `book1` and `book2`
printf( "The id of book1: %d\n", book1.id);
printf( "The author of the book1: %s\n", book1.author);
printf( "The title of the book1: %s\n", book1.title);
printf( "The id of book2: %d\n", book2.id);
printf( "The author of the book2: %s\n", book2.author);
printf( "The title of the book2: %s\n", book2.title);
return 0;
}
输出结果如下:
The id of book1: 1
The author of the book1: Zara Ali
The title of the book1: Tutorials for C Programming
The id of book2: 2
The author of the book2: Zaid Ali
The title of the book2: Tutorials for Java Programming
方法 2:
#include<stdio.h>
typedef struct Books{
int id;
char author[50];
char title[50];
}Book;
int main() {
//declare `book1` and `book2` of type `Book`
Book book1;
Book book2;
//the specifications for the `book1`
book1.id = 1;
strcpy(book1.author,"Zara Ali");
strcpy(book1.title,"Tutorials for C Programming");
//the specifications for the `book2`
book2.id = 2;
strcpy(book2.author,"Zaid Ali");
strcpy(book2.title,"Tutorials for Java Programming");
//display information for `book1` and `book2`
printf( "The id of book1: %d\n", book1.id);
printf( "The author of the book1: %s\n", book1.author);
printf( "The title of the book1: %s\n", book1.title);
printf( "The id of book2: %d\n", book2.id);
printf( "The author of the book2: %s\n", book2.author);
printf( "The title of the book2: %s\n", book2.title);
return 0;
}
输出结果如下:
The id of book1: 1
The author of the book1: Zara Ali
The title of the book1: Tutorials for C Programming
The id of book2: 2
The author of the book2: Zaid Ali
The title of the book2: Tutorials for Java Programming
第二种方法表明使用 typedef
似乎更有条理、更干净,并且易于理解和管理。
使用 typedef 关键字时的要点
在使用 typedef
关键字时,我们必须记住几点。 在上面给出的代码中,我们定义结构如下。
typedef struct Books{
int id;
char author[50];
char title[50];
}Book;
在这里,我们有一个新的结构类型,struct Books
,以及 struct Books
的别名 Book。 您可能想知道为什么带有 typedef
的别名像任何其他普通声明一样出现在声明的末尾。
typedef
被放在与存储类说明符完全相同的说明符类别中,例如,auto
和 static
。 如果我们只想使用 Book 类型标识符,我们也可以不使用标签名称进行声明。
typedef struct{
int id;
char author[50];
char title[50];
}Book;
在使用结构时,我们必须注意所谓的变量和别名。 如果我们如下使用匿名结构(匿名是因为该结构没有名称),那么 Book 将是用户定义的数据类型结构变量。
struct{
int id;
char author[50];
char title[50];
}Book;
如果我们使用上面给出的相同结构但使用 typedef
关键字,那么 Book 将是数据类型结构的别名(同义词),我们可以使用它来声明变量(见下文)。
typedef struct{
int id;
char author[50];
char title[50];
}Book;
相关文章
在 C 语言中使用 typedef enum
发布时间:2023/05/07 浏览次数:181 分类:C语言
-
本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。
C 语言中的 extern 关键字
发布时间:2023/05/07 浏览次数:114 分类:C语言
-
本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量
C 语言中的 #ifndef
发布时间:2023/05/07 浏览次数:186 分类:C语言
-
本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。