0
点赞
收藏
分享

微信扫一扫

从零开始的数据结构生活-结构体c基础(含个人深度理解)

流沙雨帘 2022-01-30 阅读 79

结构体

  • 为什么要有结构体

    • 对于一个对象(实体),本身就有很多不同的属性,属性的类型也不一样,这就需要一种类型可以存储不同数据类型的属性(不同数据类型的组合),同时还需要数据的独立性(人与人的三维)

  • 何为结构体

    • 其他数据类型的集合的一种集合型数据类型

    struct person {//struct代表声明结构体
        //属性     //把struct person整体当作一个类型
        char sex;//此处的char类型不是1个字节?
        int age;//由于内存对齐,按照最大的平均分成3块连续的空间
        char* name;
    };

  • 结构体特点

    • 并没有实际的数据对象,而是一种自定义的数据类型

    • 利用内存对齐追求速度即空间换时间(嵌入式则时间换空间

  • 结构体的初始化

    struct person {
        char sex;
        int age;
        char* name;
    };
    ​
    int a;//类比a的定义来来理解把(struct person)整体当作一种数据类型
    ​
    struct person b;//声明结构体对象
    b.age=20;//直接用.获取属性来初始化
    ​
    struct person c={//在定义时初始化
        '男',
        '20',
        'Mike'
    };
    ​
    struct person d={//同数组的指定初始化
        .age=20
    }

  • 结构体的嵌套

    struct cpu {
        int ALU;
        int Cache;
    };
    struct control {
        int ALU;
        int Cache;
    };
    ​
    struct computer {//结构体的嵌套
        struct cpu cpu01;
        struct control con;
    };
    ​
    //结构体嵌套赋值 用两个.获取属性
    struct computer com;
    com.cpu01.ALU = 10;

  • 结构体数组与结构体指针

    struct person {
        char sex;
        int age;
        char* name;
    };
    ​
    ​
    struct person a;//单个结构体对象(单个结构体类型的空间)
    struct person struct_array[10];//结构体数组
    struct_array[0].age = 10;//结构体数组赋值
    ​
    struct person *ptr;//结构体指针
    ptr=&a;//指针指向a这个结构体类型的空间
    ptr->age=10;//指针用ptr来获取属性
    • 结构体数组struct_array[10]相当于开辟了10个连续空间的数组,每个空间存放的都是结构体

  • 结构体与函数

    void show(struct person*);//传结构体指针
    void show1(const struct person);//直接传结构体
    ​
    int main(){
        struct person a;
        struct person *ptr;
        ptr=&a;
        show(ptr);
        show(&a);//Q1:要理解为啥c指针进去也一样
        show1(b);
        
        return 0;
    }
    ​
    void show(struct person*a){
        printf("%d\n",a->age);
    }
    ​
    void show1(const struct person a) {
        //const使传进去之后只读不能改
        //const 数据保护
        printf("%d\n", a.age);
    • 可以直接传结构体或者用结构体指针接收地址(&a)

    • Q1-A1:指针p指向这个结构体a说明p存放了&a,传指针p进去函数相当于把&a放给一个形式指针来保管

举报

相关推荐

0 条评论