弱弱的问一下关于struct的一些问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 19:21:34
如 struct st
{
char name[30];
int age;
}; <--------这为什么有分号。不是{}后可以不写分号吗?有人可能会说是一个语句,后面的变量省去了,那struct st为什么声明后就非要加变量呢?

struct st s1;这是声明s1是一个st类型的是吧!

typedef struct{
char name[30];
int age;
} student;
student Liuqi;
这个student是一个变量还吗?以上语句是不是可以理解为把struct st的st给省掉了呢?

弱弱的问题。大家别笑话我。最好给我一个关于struct的详细解释!!

必须要写分号的 这个和c++里面的类是一样的

struct st s1;这是声明s1是一个st类型的是吧!


typedef struct{
char name[30];
int age;
} student;

这里typedef的意思是把下列的匿名struct进行“命名替换”为student

所以下文中student也为一个变量类型了

关于把struct省略是c99的新规定,嗯,取决于你的编译器对新标准的支持了,当然c++是可以省略struct的

struct 结构体名 {
结构体内容
};

以上为结构体声明时的标准格式,分号不可省,没有为什么。当然,随着你学习的深入,你可以了解到大括号在C/C++中的含义是域,学习编译原理之后你会了解到高级语言在词法分析时的细节内容,那么你会对这里为什么加分号有所了解。现在你就记住这是固定的格式就OK。

------------------

struct st s1;

在声明了:
struct st { ... };
之后,我们可以认为struct st是一个类似int,char等等内置数据类型的用户自定义数据类型,就像我们可以声明一个int a;一样,我们也可以声明一个结构体变量b,形如:
struct st b;

-------------------------

typedef struct{
char name[30];
int age;
} student;

上面是结构体重命名的一般格式,其含义为:将struct { char ... }这个结构体类型重命名为student,类似于typedef int MYINT;。
于是,student现在是一个自定义数据类型(结构体类型)。

当然,在进行typedef的时候,我们通常省略标准格式中的结构体名(参见本答案最上面的部分),如