鱼C论坛

 找回密码
 立即注册
查看: 2371|回复: 0

[技术交流] 8.C语言结构和联合笔记

[复制链接]
发表于 2017-6-16 18:06:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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


结构体的声明:

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

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

法二:
先声明一个标签,再定义变量:

struct        person
{
        int a;
        char name[size];
};
struct person rgt;
struct person y[20],*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鱼币 +6 收起 理由
小甲鱼 + 6 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 08:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表