嵌入式学习笔记 - 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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值