为什么这个typedef代码不能创建实例

时间:2014-08-17 18:45:00

标签: c struct structure typedef

我对以下结构代码的理解是最后一个“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“替代”,只需通过最后一个代码块的第一行?

1 个答案:

答案 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