c语言自建结构

结构:  

    结构是由程序员自己设计的数据类型,用于描述一个事物的各项数据,由若干个基础类型组成

    设计:

    typedef struct 结构体名

    {

        类型1 成员名1;

        类型2 成员名2;

        ...

    }新名字;

    typedef struct Teacher Teacher;

    定义结构变量:

        struct 结构体名 变量名;

        注意:在定义结构变量时struct不能省略

        结构体变量初始化:

            struct 结构体名 变量名={v1,v2...};

            注意:必须要根据成员设计的顺序初始化,初始化省略只能从后面开始,不能直接省略中间的

            struct 结构体名 变量名={.成员名1=v1,.成员名3=v3,...}

            只初始化某些成员,可以不用按顺序初始化

            struct Student stu1=stu2;  同类型的结构体变量可以直接给结构体变量初始化丶赋值

        访问成员:

            变量名.成员名

            结构指针->成员名

            结构变量作为形参时:结构体字节数较大,值传递效率低,传指针效率高,不需要改值加const保护

            练习1:设计一个教师结构体,成员有姓名 性别 工号 工龄 定义一个教师结构体变量,使用scanf输入各个成员的值并显示

            注意:结构体变量一般较大,最好存在堆内存

    如何计算结构体的字节数:

        结构体成员的顺序会影响总字节数

        内存对齐:假定第一个成员从0开始,存储每个成员的地址编号必须满足能被该成员字节数整除,不能则补空白字节

        内存补齐:结构体的总字节数要求必须是最大成员的字节数(在linux系统下最大字节数超过4字节按4字节算,但windows下多大就多大)的整数倍,如果不是则在末尾填充空白字节

        linux下  #pragma pack(n) 最大字节超过n按n算,只能放1,2,4(因为n要小于等于4)

        windows下 该宏定义没用?

联合:union     使用少量内存对应多个标识符来节约内存,现在基本不用(没有内存对齐,有内存补齐)

    联合与结构的使用方法基本一致,区别在于所有成员公用一块内存,一个成员的值发生改变,其他成员也会跟着改变

    union Data

    {

        char ch[5];

        int num;

    };

    字节数为8

    如何判断操作系统的大小端(高位数据存低位地址为大端,反之)

    个人计算机系统一般都是小端系统,unix服务器和网络设备都是大端系统

    本地字节序是小端模式,网络字节序是大端模式

    序列化(上传时将小端转成大端)和反序列化(网上下载时将大端转成小端)(json\xml)

枚举:enum  用处:给数值起一个有意义的名字,提高可读性,相对于宏常量安全性更高

    枚举就是把一种数据类型可能出现的值全罗列出来,取一个有意义的名字,(除此之外的数据如果赋值给该枚举变量就是非法的)?

    可以看做值受限的int类型,c编译器为了效率不检查,所以c语言的枚举变量可以当int类型变量使用,一般会直接使用起好名字的枚举成员

    enum Direction

    {

        UP=183,

        DOWN=184,

        RIGHT=185,

        LEFT=186,

    };

    enum Direction key=UP;

    UP=100;报错,不可更改

enum d 

{

    a,b,c

};

则abc分别为0 1 2

enum d 

{

    a=5,b,c

};

则abc分别为5 6 7

enum d 

{

    a,b=5,c

};

则abc分别为0 5 6

全局变量初始化时不能调用函数

int* p=malloc(40) 错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值