john-rgt 发表于 2017-6-16 18:06:46

8.C语言结构和联合笔记

本帖最后由 john-rgt 于 2017-6-16 18:11 编辑

一、结构的简介
结构:相当于一个班集体,包含所有的学生,学生又分别有自己的属性;
      每个结构都有自己的名字,所以当我们访问它的时候,可以通过名字访问,但是不能通过下标访问,因为他们的长度不一定相同。

结构体的声明:

法一:
struct tag
{
        member list;
}vatiable list;

eg:
        struct person
        {
                char name;
                int number;
                char sex;
        }rgt;

法二:
先声明一个标签,再定义变量:
struct        person
{
        int a;
        char name;
};
struct person rgt;
struct person y,*z;
person为标签,rgt是结构体变量;
法三:
用typedef创建一个新类型;
typedef struct
{
        int a;
        char b;
}simple;
simple x;
simple y;
这个技巧和声明一个结构标签一样,但是区别在于simple现在是个类型名,而不是个结构标签;

二、结构的访问
1、直接访问,用 ( . ) 操作符;
2、间接访问 a->b,a必须是一个指向结构的指针
3、结构的自引用:
        struct person
        {
                int a;
                struct person b;
        }
        这个是非法的,因为内部包含成员b,而b又是一个完整的结构,它还将包括它自己的成员b,这样重复下去永无止境;
        struct person
        {
                int a;
                struct person *b;
        }
        b现在是一个指针而不是结构,这种引用是合法的。
注意:
        typedef struct
        {
                int a;
                simple *b
                char c;
        }simple;
这个声明是错误的,这里必须定义一个标签来声明b;
        typedef struct simple_rgt
        {
                int a;
                struct simple_rgt *b;
                char c;
        }simple;

4.不完整的声明
相互依赖的结构。
        struct B;
        struct A{
                struct B *partner;       
        };
        struct B{
                struct A *partner;       
        };

三、结构、指针和成员
当声明一个结构指针,指向一个结构时,指针与结构的一个成员的类型不一样,所以不能相等。

四、结构的存储分配

        struct中的每个域在内存中都独立分配空间
        union只分配最大域的空间,所有域共享这个空间


我们在声明结构成员时,让那些对边界要求严格的成员首先出现


五、位段
位段的成员必须为int /signed int /unsigned int ,其次在成员名后面是一个冒号和一个整数,整数知道该位段所占用的位的数目;
页: [1]
查看完整版本: 8.C语言结构和联合笔记