C基础之柔性数组

本文详细介绍了柔性数组的概念及其在C/C++中的使用方法。柔性数组允许结构体包含一个大小可变的数组成员,使得结构体的大小能够根据实际需求动态调整。文章通过具体示例展示了如何定义和使用含有柔性数组成员的结构体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

柔性数组 :结构中允许最后一个成员是大小未知的数

结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组。

sizeof返回的这种结构大小不包括柔性数组的内存。

包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小

例如:

    struct stu
    {
       int i;
       int a[0];//int a[];同样也可以,不过有点编译器可能会在前一种方法上报错
    }stu1;
我们定义了一个可变长的结构体,利用sizeof 测得sizeof(stu)=sizeof(i)=sizeof(int)=4,最后定义的数组没有占用空间。

程序:


    #include <iostream>

    using namespace std;

    struct MyData
    {
        int nLen;
        char data[0];
    };

    int main()
    {
        int nLen = 10;
        char str[10] = "123456789";

        cout << "Size of MyData: " << sizeof(MyData) << endl;

        MyData *myData = (MyData*)malloc(sizeof(MyData) + 10);
        memcpy(myData->data, str, 10);

        cout << "myData's Data is: " << myData->data << endl;

        free(myData);

        return 0;
    }

输出如下
    Size of MyData: 4
    myData's Data is: 123456789
参考:http://blog.chinaunix.net/uid-27122224-id-3308027.html 点击打开链接
可以另参考:http://www.cppblog.com/Dream5/articles/148386.html 点击打开链接

http://coolshell.cn/articles/11377.html点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值