当前位置: 首页 > ai >正文

嵌入式学习笔记 - C语言中结构体的定义,以及结构体变量的内存空间的分配

在C语言中,定义结构体本身不会自动分配内存,只有在创建结构体变量时才会分配内存‌。结构体是一种复合数据类型,用于将不同类型的数据组合成一个整体。定义结构体时,只是定义了一个数据结构的形式,并没有实际分配内存空间。只有在创建结构体变量时,系统才会根据结构体成员的大小和数量,为其分配相应的内存空间‌12。

结构体的定义和内存分配

  1. 定义结构体‌:在C语言中,通过struct关键字定义结构体。例如:

    struct Student { char name; 
    int age; 
    }; 这个定义只是声明了一个名为Student的结构体类型,并没有分配内存空间。通常所说的结构体是指结构体类型。结构体变量才是真正的结构体。
  2. 分配内存‌:创建结构体变量时,系统会为其分配内存空间。例如:

    struct Student stu1; // 分配内存空间给stu1 

    此时,stu1占用的内存空间包括name数组和age变量所需的空间。

动态内存分配与静态内存分配

  1. 静态分配‌:在编译时确定内存大小,适用于结构体大小已知且较小的情况。例如:

    struct Person p; // 编译时分配内存 
  2. 动态分配‌:在运行时动态分配内存空间,适用于结构体大小未知或较大的情况。例如:

    struct Person* p = (struct Person*)malloc(sizeof(struct Person)); // 运行时分配内存 
    if (p != NULL) 
    { p->name = (char*)malloc(20 * sizeof(char)); // 为结构体中的指针成员单独分配内存 
    }// 使用完毕后需要释放内存 
    free(p->name); free(p);
http://www.xdnf.cn/news/13563.html

相关文章:

  • Ubuntu24.04 onnx 模型转 rknn
  • 离线部署openstack 2024.1 glance
  • 离线部署openstack 2024.1控制节点neutron
  • MySQL之事务与读视图
  • 硬件行业职业规划四篇
  • Day-16【选择与循环】04循环结构while
  • Python窗体编程技术详解:从入门到精通实战指南
  • CTF-DAY13 PolarDN2025年夏季个人 复现
  • ETLCloud中数据生成规则使用技巧
  • Vue2 与 Vue3 的插槽(默认插槽、具名插槽、作用域插槽、具名插槽 + 作用域插槽)
  • lesson05-手写数据问题案例实战(理论+代码)
  • linux回收站
  • 爱普生TG5032SGN同步以太网的高精度时钟解决方案
  • P2840 纸币问题 2
  • 华为OD机考-数字螺旋矩阵(JAVA 2025B卷)
  • Python前端系列(三)
  • DATABASE 结构迁移实战手册:脚本生成、分类与部署全流程详解
  • 华为云Flexus+DeepSeek征文|华为云CCE容器高可用部署Dify LLM应用后的资源释放指南
  • 掌握Linux进程替换:从原理到实战(自定义shell)
  • 笔试模拟day1
  • 随记 使用certbot申请ssl证书
  • 跨域的本质与实战:从理论到松鼠短视频系统的演进-优雅草卓伊凡|卢健bigniu
  • 数据库游标:逐行处理数据的“手术刀”——从原理到实战的深度解析
  • 开关电源-KA3842A芯片的电路分析
  • CSS“多列布局”
  • 电池充放电容量检测:能否精准锁定电池真实性能?
  • PSCAD closed loop buck converter
  • 打卡day51
  • CMake安装教程
  • 2025GEO供应商排名深度解析:源易信息构建AI生态优势