结构体的定义

结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。

struct tag{
member -list
}variable -list;
//此声明 拥有3个成员的结构体,分别为整型的a,字符型b和双精度的C
//同时又声明了结构体变量s1
//这个结构体并没有标明其标签

struct{
    int a;
    char b;
    double  c;
} s1;

//结构体的标签被命名为SIMPLE,没有声明变量
//有点像定义了一个类,但是并没有实例化对象
struct SIMPLE{
    int a;
    char b;
    double c;
};
//用SIMPLE标签的结构体,另外声明了变量t1,t2,t3
struct SIMPLE t1,t2[20],*t3;

//也可以用typedef创建新类型
typedef struct{
    int a;
    char b;
    double c;
}Simple2;

//现在可以用Simple2作为类型声明新的结构体变量
Simple2 u1,u2[20],*u3;

//第一个声明和第二个声明被编译器当作完全不同的类型,即使它们的成员列表是一样的,如果令t3 = &s1,则是非法的。

//结构体的成员可以包含其他结构体,也可以包含自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树


//此结构体的声明包含了其他的结构体
struct COMPLEX{
    char string[1000];
    struct SIMPLE a;
};

//此结构体的声明包含了指向自己类型的指针
struct NODE{
    char string[100];
    struct NODE *next_node;
};

//如果两个结构体相互包含,则需要对其中一个结构体进行不完全声明,如下所示:

struct B;
//对结构体B进行不完全声明
//结构体A中包含指向结构体B的指针

struct A{
    struct B *partner;
    //other member;
};
//结构体B中包含指向结构体A的指针。在A声明完后,B也随之进行声明

struct B{
    struct A *partner;
    //other members
};



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容