柔性数组介绍及使用场景,使用优点及注意事项

简介: 柔性数组介绍及使用场景,使用优点及注意事项
//柔性数组---结构体之前必须有其他成员,且最后一个数组成员大小未知
// 
// 优点:1.方便内存释放
// 2.有利于访问速度
// 
//struct S
//{
//    int n;
//    int arr[];//柔性数组---大小未知,sizeof计算结构大小时,不包含柔性数组的大小
//    //或int arr2[0]
//};
//
//int main()
//{
//    struct S  s= { 0 };
//    printf("%s\n", sizeof(s));//sizeof计算结构大小时,不包含柔性数组的大小
//    //期望arr是10个整形时
//    struct S*ps=(struct*)malloc(sizeof(struct S) + 10 * sizeof(int));
//    //sizeof(struct S)是数组大小,10*sizeof(int)是给arr准备的
//    return 0;
//}
//柔性数组使用场景
struct S
{
    int n;
    int arr[0];
};
int main()
{
    struct S* ps = (struct S*)malloc(sizeof(struct S) + 10 * sizeof(int));//10 * sizeof(int))是预留空间
    //不能频繁使用malloc,因为随着malloc开辟,内存碎片会增加
    ps->n = 10;
    int i = 10;
    for (i = 0; i < 10; i++)
    {
        ps->arr[i] = i;
    }
    //需要增加大小时
        struct S*ptr = (struct S*)realloc(ps, sizeof(struct S) + 20 * sizeof(int));
    if (ptr != NULL)
    {
        ps = ptr;
    }
    //使用
    //释放
    free(ps);
        ps = NULL;
    return 0;
}
相关文章
|
7月前
|
消息中间件 Kubernetes NoSQL
智能指针的种类以及使用场景
智能指针的种类以及使用场景
|
2月前
简化数据结构的初始化过程
简化数据结构的初始化过程
49 0
|
21天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
43 5
|
6月前
|
安全 Java 数据库
ifPresent()`方法的用途、使用场景
ifPresent()`方法的用途、使用场景
455 4
|
6月前
|
存储 NoSQL Redis
详解布隆过滤器的原理、使用场景和注意事项
详解布隆过滤器的原理、使用场景和注意事项
253 0
|
6月前
|
存储 Python
Python成员属性的内存特性与底层内存优化方案
这篇博客主要分享一下python成员属性的内存特性,也就是python底层节约内存的优化方案
|
存储 Cloud Native 程序员
C++ 指针的优点及好处
C++ 指针的优点及好处
|
存储 安全 Java
TheadLocal的使用场景和注意事项
TheadLocal的使用场景和注意事项
114 0
|
7月前
什么是扩展运算符?使用场景
什么是扩展运算符?使用场景
74 0
|
7月前
什么是扩展运算符?有什么使用场景?
什么是扩展运算符?有什么使用场景?