美文网首页
结构体(一)

结构体(一)

作者: qianranow | 来源:发表于2018-04-26 09:28 被阅读38次

0. 概念


  • 理解:用来保存一组 不同类型数据 的抽象
    格式:struct 结构体类型名称 {
                属性;
         };
    
    struct Person {
      char *name;
      int age;
      double height;
    };
    

1. 定义


  • 形式
    1. 先定义结构体类型,再定义结构体变量
       struct Person {
         char *name;
         int age;
         double height;
       };
       struct Person sp;
    
    2. 定义结构体类型同时定义结构体变量
       struct Person {
         char *name;
         int age;
         double height;
       } sp;
    
    3. 定义结构体类型同时定义结构体变量,省略结构体类型名称
       struct {
         char *name;
         int age;
         double height;
       } sp;
    

2. 初始化


  • 形式
    1. 先定义结构体变量,再逐个初始化
       struct Person {
         char *name;
         int age;
         double height;
       } sp;
       sp.name = "wxx";
       sp.age = 18;
       sp.height = 2.00;
       printf("name = %s, age = %i, height = %lf\n", sp.name, sp.age, sp.height);
    
    2. 先定义结构体变量,再一次性初始化
       struct Person {
         char *name;
         int age;
         double height;
       } sp;
       sp = (struct Person){"wxx", 18, 2.00};
       printf("name = %s, age = %i, height = %lf\n", sp.name, sp.age, sp.height);
    
    3. 定义结构体变量同时初始化
       struct Person {
         char *name;
         int age;
         double height;
       };
       struct Person sp = {"wxx", 18, 2.00};
       printf("name = %s, age = %i, height = %lf\n", sp.name, sp.age, sp.height);
    
    4. 定义结构体变量同时将数据赋值给指定属性
       struct Person {
         char *name;
         int age;
         double height;
       } sp = {.name = "wxx", .age = 18, .height = 2.00};
       printf("name = %s, age = %i, height = %lf\n", sp.name, sp.age, sp.height);
    

3. 内存分配


  • 地址:结构体变量地址 == 第 0 个属性地址
  • 存储细节
    1. 先存储第 0 个属性,再依次存储其他属性
    2. 先开辟一块属性中 占用内存最大 的存储空间存储数据
    3. 如果剩余存储空间 不够 存储将要存储的数据,那么就会重新开辟一块和 第一次同样大小的存储空间,
       并且将需要存储的数据放到新开辟的存储空间中
    4. 如果剩余存储空间 够 存储将要存储的数据,那么不会开辟新的存储空间
    
  • 示例
    struct Person {
      char c; // 1
      int age; // 4
      double height; // 8
    };
    struct Person sp;
    printf("size = %lu\n", sizeof(sp));
    
    struct Dog {
      int age; // 4
      double height; // 8
      char c; // 1
    };
    struct Dog dp;
    printf("size = %lu\n", sizeof(dp));
    

相关文章

  • C结构体和链表

    一,结构体变量定义及初始化 二,无名结构体 备注:无名结构体很少使用 三,宏定义结构体 四,结构体嵌套 五,结构体...

  • 6.结构体相关

    一 C 结构体和结构体指针 eg1: 一 结构体里面定义函数 通过结构体指针访问结构体里面定义的函数。 eg2:

  • 结构体的基本操作

    结构体定义和初始化 结构体变量相互赋值 结构体数组 结构体嵌套一级指针 结构体嵌套二级指针 结构体偏移量 联合体 ...

  • 结构体

    [toc] 结构体的定义方式 先定义结构体类型,再定义结构体变量 定义结构体类型的同时定义结构体变量 定义结构体类...

  • 12-Go语言结构体

    结构体 结构体的基本概念 什么是结构体Go语言中的结构体几乎和C语言中的结构体一模一样都需要先定义结构体类型, 再...

  • 【C语言笔记】<十九>结构体

    结构体的基本概念 结构体初始化 结构体的内存存储细节 结构体定义的方式 结构体类型的作用域 指向结构体的指针 结构...

  • 结构体

    结构体定义* 结构体中的格式:* struch 结构体名* {* 结构体成员变量* }* 结构体中的特点* 1.结...

  • Go 学习笔记 08 | 结构体详解

    一、结构体 实例化结构体 第一种实例化结构体:var 变量 结构体 输出: 结构体首字母可以大写也可以小写,大写表...

  • C语言-5、结构体

    写法一 写法二 写法三 结构体指针 结构体指针 与 动态内存开辟 结构体的数组 结构体与结构体指针 取别名 取别名...

  • 结构体数组的定义

    结构体数组的定义 1、先定义结构体类型,再定义结构体数组 2、定义结构体类型的同时定义结构体数组 3、省略结构体类...

网友评论

      本文标题:结构体(一)

      本文链接:https://www.haomeiwen.com/subject/ruxplftx.html