• C 结构体、位域


    参考链接:https://www.runoob.com/cprogramming/c-structures.html

    结构体是干啥的

    例如数组可以用来存储多个相同数据类型的数据项,结构体也是一种数据类型,可以用来储存多个不同数据类型的数据项。

    定义结构

    struct Book{
        int i;
        float f;
    };//这就声明了一个数据体,而Book标识是这种构造的结构体,表示一个标签名(就像类名),声明结构体变量如下:
    Book book1,book2,book3;
    
    //也可以用typedef创建新类型
    typedef struct
    {
        int a;
        char b;
        double c; 
    } Simple2;
    
    //可以在定义结构体的同时定义一个或者多个结构变量(就好像实例化)
    struct Book{
        int id;
        char name;
    }book1,book2;
    //可以直接声明一个或者多个结构变量,而不声明标签名(这里需要注意,下面这个和上面的那个是不一样的,因为标签名不一样 ,即使他们的内部一样)
    struct {
        int id;
        char name[100];//这样会使sizeof(book1)的结果为104,因为sizeof(int)为4,再加上这个指定的100字节
    }book1,book2;
    

    结构体的嵌套

    结构体内部可以包含其他的结构体,还可以包含指向自己结构类型的指针,这样是为了实现其他复杂的数据结构
    如果两个结构体互相包含,则需要先对其中的一个进行不完整声明(为啥要声明,因为使用之前就是要声明)

    结构体的初始化和访问

    初始化

    struct Book{
        int i;
        float f;
    }book1={1234,"从入门到放弃"};
    //使用**成员访问符`.`**进行访问
    printf("%d",book1.i);
    

    结构体作为函数的参数

    结构体作为函数的参数和其他类型或者指针的方式一样,只是需要增加一个struct关键字 和标签名

    //函数声明
    void funcname(struct Book book);
    

    指向结构体的指针和访问

    *struct books ptr_name 前面的两个可能是表示类的继承
    与指向其他类型的指针声明类似,只是需要增加一个struct关键字和标签名

    //函数声明
    struct Book *ptrname
    

    访问的时候使用->运算符代替成员运算符.

    位域

    位域与结构体类似

    struct 位域结构名
    {
    位域列表
    };
    位域列表的形式为
    类型说明符 位域名: 位域长度

    struct k{
        int a:1;
        int  :2;    /* 该 2 位不能使用 *///因为是无名域位,用于调整位置
        int b:3;
        int c:2;
    };
    
  • 相关阅读:
    Jquery同步载入数据
    fireEvent方法
    条件判断问题,不太清楚有什么区别!
    Request.QueryString,Request.Form与JavaScript中模态窗口传参
    SQL求百分比
    event.srcElement
    判断输入信息为数值类型
    SQL 表变量,临时表
    读写二进制文件
    串口通信
  • 原文地址:https://www.cnblogs.com/Gaoqiking/p/11728516.html
Copyright © 2020-2023  润新知