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

简介: 柔性数组介绍及使用场景,使用优点及注意事项
//柔性数组---结构体之前必须有其他成员,且最后一个数组成员大小未知
// 
// 优点: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;
}
相关文章
|
6月前
|
消息中间件 Kubernetes NoSQL
智能指针的种类以及使用场景
智能指针的种类以及使用场景
|
9天前
|
存储 缓存 Java
结构体和类在性能方面有哪些差异?
【10月更文挑战第30天】结构体和类在性能方面有哪些差异?
|
5月前
|
安全 Java 数据库
ifPresent()`方法的用途、使用场景
ifPresent()`方法的用途、使用场景
397 4
|
5月前
|
存储 NoSQL Redis
详解布隆过滤器的原理、使用场景和注意事项
详解布隆过滤器的原理、使用场景和注意事项
229 0
|
4月前
|
存储 C++ 运维
开发与运维数组问题之指针的定义语法如何解决
开发与运维数组问题之指针的定义语法如何解决
35 6
|
5月前
|
存储 Python
Python成员属性的内存特性与底层内存优化方案
这篇博客主要分享一下python成员属性的内存特性,也就是python底层节约内存的优化方案
|
存储 Cloud Native 程序员
C++ 指针的优点及好处
C++ 指针的优点及好处
|
6月前
|
存储 安全 C语言
C++中灵活 处理可变参数的多种方式:优缺点、应用场景及示例对比
C++中灵活 处理可变参数的多种方式:优缺点、应用场景及示例对比
137 1
|
存储 Cloud Native 编译器
C++智能指针种类以及使用场景
C++智能指针种类以及使用场景
|
存储 算法 Java
探索Java数组:基础、特性与灵活应用
在Java编程中,数组是一种基础而重要的数据结构,它能够以紧凑的方式存储多个元素。无论是在简单的数据存储还是复杂的算法实现中,数组都扮演着不可或缺的角色。本文将引导您深入了解Java数组,包括数组的基本概念、特性、用法以及常见应用场景。