• C ------ 结构体


    A->xxx; // A是结构体指针

    A.XXX; // A是结构体变量

     定义:

    类型1

    struct A{
       int a;
       int b;  
    };

    struct A表示结构体类型,定义变量:struct A var;

    类型2

    struct A{
       int a;
       int b;  
    }B;

    B是变量

    struct A表示结构体类型,定义变量:struct A var;

    类型3

    struct {
       int a;
       int b;  
    }B;

    此类型只有一个变量B,由于没有定义结构类型标识符,无法单独创建变量

    类型4

    typedef struct A{
       int a;
       int b;  
    }B;

    struct A表示结构体类型,定义变量:struct A var;

    B 等价于 struct A,定义类型:B var;

    类型5

    typedef struct {
       int a;
       int b;  
    }B;

    B 表示结构体类型,定义变量:B var;

    初始化:

        //定义结构体类型  
        struct Person  
        {  
            charchar *name;  
            int age;  
            double heigth;  
        };  
          
        //初始化的4种方式  
          
        //1.定义的同时初始化  
        struct Person p1 = {"zhangsan",20,170};  
          
        //2.先定义再逐个初始化  
        struct Person p2;  
        p2.name = "ykd";  
        p2.age = 18;  
        p2.heigth = 180;  
          
        //3.先定义再一次性初始化  
        struct Person p3;  
        p3 = (struct Person){"lisi",18,180};  
          
        //注意:结构体和数组在这里的区别,数组不能先定义再进行一次性初始化  
        //结构体要明确的告诉系统{}中是一个结构体  
          
        //4.指定将数据赋值给指定的属性  
        struct Person p4 = {.heigth=1.77, .name="wangwu", .age=33};  

    函数指针作为结构体成员:

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node
    {
        int a;
        void(*p)(int b);
    }no;
    
    void fun(int b)
    {
        printf("hello,%d
    ",b);
    }
    
    int main()
    {
        no a = { 1,fun };
    
        a.p(a.a);
        system("pause");
        return 0;
    }

    控制台会打印出“hello,1”

    定义结构体时变量名后的冒号和数字

    struct frame_control {  
        u_char fc_subtype : 4;  
        u_char fc_type : 2;  
        u_char fc_protocol_version : 2;  
        u_char fc_order : 1;  
        u_char fc_wep : 1;  
        u_char fc_more_data : 1;  
        u_char fc_pwr_mgt : 1;  
        u_char fc_retry : 1;  
        u_char fc_more_frag : 1;  
        u_char fc_from_ds : 1;  
        u_char fc_to_ds : 1;  
    };  

    这是位域操作的表示方法,也就是说后面加上“:1”的意思是这个成员的大小占所定义类型的1 bit,

    “:2”占2 bit,依次类推。当然大小不能超过所定义类型包含的总bit数。

    一个bytes(字节)是8 bit(bit)。例如你的结构中定义的类型是u_char,一个字节,共8bit,最大就不能超过8。
    32位机下,short是2字节,共16bit,最大就不能超过16。int是4字节,共32bit,最大就不能超过32。依次类推。

    这样定义比较省空间。例如上面的结构,定义的变量类型是u_char,是一字节类型,即8bit。
    fc_subtype占了4bit,fc_type占2bit,fc_protocol_version占2bit,共8bit,正好是一个字节。
    其他八个成员,各占1bit,共8bit,正好也是一个字节。
    因此结构的大小如果用sizeof(struct frame_control)计算,就是2bytes.

  • 相关阅读:
    万科郁亮:不赚最后一枚铜板,不盯竞争对手
    京东到底是家零售企业 还是家互联网公司?
    Google Shopping对卖家开放 或抗衡亚马逊
    网易大裁员,善变的丁磊开始焦虑了
    菜鸟物联网战略引领行业数字化升级
    入淘创业的新赛道:淘宝自运营覆盖50万商家
    腾讯的人工智能大战已然打响!
    冷链物流市场三个重要的发展趋势
    有人的地方就有江湖,来看看这三个男生和闲鱼的故事
    CSS布局-垂直居中问题
  • 原文地址:https://www.cnblogs.com/god-of-death/p/8011192.html
Copyright © 2020-2023  润新知