我对以下结构代码的理解是最后一个“s1”创建了我们新数据类型的实例;
struct student
{
int age;
char *name;
}s1;
添加s1就好像我输入了以下内容(在创建结构类型之后)
struct student s1;
但是,如果我使用typedef,代码不会创建实例;相反,它只是让s1成为struct student的同义词。这种解释是否正确?我只是因为我发现它与第一个代码块
的工作方式不同而感到奇怪typedef struct student
{
int age;
char *name;
}s1;
这不会创建一个名为s1的struct student实例;它使s1相当于输入struct student。我觉得奇怪的是,我认为typedef本身足以避免一直输入struct student。也就是说,如果我从上面的代码块中排除了s1,我只需输入
即可student s1;
而不是
struct student s1;
感谢添加了typedef。
如果是这种情况,那么这不是多余的:
typedef struct student
{
int age;
char *name;
} student;
我已经能够简单地输入结构学生中的C“替代”,只需通过最后一个代码块的第一行?
答案 0 :(得分:2)
这就是typedef
的工作方式。通过将其添加到原本可以作为变量定义的内容,您可以创建类型别名的声明。使用基本类型更容易看到:
int a; // a is a variable of type int
typedef int b; // b is a synonym for the type int
“我觉得奇怪的是,我认为typedef本身就足以避免一直输入struct student。也就是说,如果我从上面的代码块中排除了s1,我只需输入{{ 1}}“
不,那不行。 Try it
没有尾随名称的student s1;
在语法上是正确的,但没有意义。
typedef