c语言结构体定义和使用
结构体的定义
结构体的一般表现形势为
struct 结构体名{
成员列表
};
在成员列表中可以是几种基本数据类型如char,int等,也可以是结构体类型(可以是这个结构体本身,或者是其他结构体类型)
定义一:
定义结构体类型,不定义变量,比如一个人,有性别,有年龄,有名字。
struct Person{
char sex;
float years;
char *name;
};
然后再定义变量
struct Person ReCarChoi;
我们就定义了ReCarChoi这个人,它是Person这个结构体的一个变量,拥有里面的三个属性
(注意:这种定义方式struct关键字不能省略)。
定义二:
定义结构体类型,同时定义变量。比如
struct Person{
char sex;
float years;
char *name;
}ReCarChoi;
当你需要的结构体变量不多的时候,也可以直接省略结构体名字:
struct{
char sex;
float years;
char *name;
}ReCarChoi;
这样做书写简单,但是缺点就是后面无法利用该结构体定义新的变量;
定义三:使用宏定义
#define PER struct Person
PER{
char sex;
float years;
char *name;
};
PER ReCarChoi;
实际就是把struct Person替换成了PER,并无太多看点,只是写法方便了。
struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
结构体是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
C语言结构体类型
struct在C语言中是一个关键字,用于定义结构数据类型。 问题中的两种定义的区别在于第一种是给student数据类型,重新定义了一个类型别名,而第二种则单纯的表示一种叫做student的数据结构类型。两者的主要区别在于后面直接定义变量时。如下代码,则可以直接在结构体后面定义一个zhang_san的结构体变量。struct student{int num;struct student *next;}zhang_san; 而第一种的定义,则会出现错误。typedef struct student{ int num; struct student *next;}student zhang_san; 扩展: “结构”是一种构造数据类型,现在一般叫做用户自定义数据类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构即是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。 定义一个结构的一般形式为:struct结构名{//成员表列}; 成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名;”。成员名的命名应符合标识符的书写规定。例如:struct stu{ int num; char name[20]; char sex; float score;}; 在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。