一、结构体声明
1.结构体是什么?
结构体作为由程序员自己来定义的类型,其本身相对其他类型来说是复杂的,如相对int,char,long,float……等来说,下面这个结构体就可以描述更为复杂的对象’人‘:
typedef struct
{
char name;
int age;
int height;
}or;
这段代码定义了一个包含name、age、height的三个成员变量的结构体类型or,而or足以片面的描述一个人,描述的复杂度是任意单一基本数据类型都无法做到的。
可以这么说:
结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。
2.结构体的声明
(1)结构体的构成
一个结构体可能由四部分构成:结构体关键字、结构体名、成员变量和基本语法框架(可能会加入typedef类型重定义一下,这里就不算如其中了)。
struct or //"struct"结构体关键字//“or”结构体名
{
char name; //成员变量1
int age; //成员变量2
int height; //成员变量3
}; //“{ }”和“;”为基本语法框架
1.1结构体关键字
struct是结构体关键字,是说明定义为结构体的关键;
1.2结构名
由程序员根据情况和需要自由命名,需要和其他类型名区别开来,同时和struct共同构成完整的结构体类型,"struct 结构名"类比基本数据类型“int”。
1.3成员变量
指结构体所包含的元素,即它的“成员”,如上例。
1.4基本语法框架
基本的语法,分别为“{ }”和“;”构成。
(2)声明结构体
2.1基本声明格式
struct 结构名
{
成员变量;
……;
};
2.2声明的同时定义结构体变量
struct or
{
char name;
int age;
int height;
}ren,liu;
sturct or此时已经是一个结构体类型,后缀一个变量名当然可以创建一个变量,至于其是全局变量,还是局部变量就要看声明的位置了。
2.3 typedef在结构体声明时的应用
typedef struct or
{
char name;
int age;
int height;
}ren;
typedef struct
{
char name;
int age;
int height;
}run;
typedef(类型重定义)可以将类型重定义为我们喜闻乐见的样子,其用法大家还是很清楚的,忘了的话可以再复习一下。
类似于2.2,typedef将struct or重定义为ren。
2.4 typedef和成员为该类指针
typedef struct Node
{
int data;
struct Node* next;
}node;
(3)特殊的声明:匿名结构体
struct
{
char name;
int age;
int height;
}ren;
匿名结构体顾名思义,是没有名字的结构体类型,而在结构体构成讲过,完整的结构体类型由struct+名 构成,单凭struct本身是无法单独表示一个结构体类型的。
上述代码中,匿名结构体类型仅仅作为一次性的类型使用,无法再创建出和ren一样的结构体变量,即便是声明时内容一样。
下面将通过两个例子证实本观点:
①无法再创建,仅作为一次性类型使用
错误信息为:
错误(活动)E0020未定义标识符
错误(活动)E0040应输入标识符
②异父异母双胞胎
struct
{
char name;
int age;
int height;
}* ren;
struct
{
char name;
int age;
int height;
}liu;
int main()
{
ren == &liu;
return 0;
}