Melon库运用——数组篇

news2024/9/24 13:22:02

头文件片段

// mln_array.h

struct mln_array_attr
{
    void                     *pool;       // 自定义内存池结构指针
    array_pool_alloc_handler  pool_alloc; // 自定义内存池分配函数指针
    array_pool_free_handler   pool_free;  // 自定义内存池释放函数指针
    array_free                free;       // 用于对数组元素做资源释放的函数指针
    mln_size_t                size;       // 单个数组元素的字节大小
    mln_size_t                nalloc;     // 初始数组长度,后续数组按照两倍进行扩张
};

typedef struct
{
    void                     *elts;
    mln_size_t                size;
    mln_size_t                nalloc;
    mln_size_t                nelts;
    void                     *pool;
    array_pool_alloc_handler  pool_alloc;
    array_pool_free_handler   pool_free;
    array_free                free;
} mln_array_t;

代码段

#include<stdio.h>
#include<string.h>
#include "mln_array.h"

#include "mln_array.c"

typedef struct
{
	int i;
	double d;
	char c[99];
} test_type ;
// 定义数组中元素类型 
 
int main()
{
	test_type * ptr;            // 元素类型指针 
	mln_array_t arr;            // 数组 
	struct mln_array_attr attr; // 数组初始化属性
	
	
	attr.pool = NULL;
	attr.pool_alloc = NULL;
	attr.pool_free = NULL;
	attr.free = NULL;
	attr.size = sizeof(test_type);
	attr.nalloc = 1;
	// 设置各项属性值 
	
	mln_array_init(&arr, &attr);
	// 按照初始化属性attr初始化数组arr 
	
	
	mln_size_t j, k, n;
	char C[] = "Hello world!";
	
	
	ptr = (test_type *)mln_array_push(&arr);
	// 向数组中追加1个元素,并将元素内存地址返回
	if(ptr == NULL) return 1;
	ptr -> i = 1;
	ptr -> d = 1.999999;
	for(k=0; k<strlen(C); k++)
	  ptr -> c[k] = C[k];
	ptr -> c[strlen(C)] = '\0';
	
	
	ptr = (test_type *)mln_array_pushn(&arr, 2);
	// 向数组中追加n个元素,并将这些元素的内存首地址返回
	if(ptr == NULL) return 1;
	for(j=0; j<2; j++)
	{
		ptr[j].i = j + 2;
		ptr[j].d = j + 2.999999;
		for(k=0; k<strlen(C); k++)
		  ptr[j].c[k] = C[k];
		ptr[j].c[strlen(C)] = '\0';
	}


    ptr = mln_array_elts(&arr); // 获取数组所有元素的起始地址
    n = mln_array_nelts(&arr);  // 获取数组的元素个数
    for(j=0; j<n; j++)
    {
    	printf("%d\n",  ptr[j].i);
    	printf("%lf\n", ptr[j].d);
    	printf("%s\n",  ptr[j].c);
    	puts("");
	}
	
	
	mln_array_destroy(&arr);
	// 释放指定数组arr的所有元素内存


	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux编译器--gcc/g++的使用

1.gcc/g的作用 gcc/g就是将写好的c/c的代码经过预编译/编译/汇编/链接生成可执行程序的过程&#xff0c;这个过程就是编译器的作用。 PS:由于c支持c语言的语法&#xff0c;gcc和g的操作差不多&#xff0c;在这里只讲gcc的使用方法。 2.gcc如何完成 格式 gcc [选项] 要编译的文…

函数指针数组:更高效的代码实现方式——指针进阶(二)

目录 前言 一、函数指针 什么是函数指针 函数指针的使用 二、函数指针数组 什么是函数指针数组 函数指针数组的使用 三、指向函数指针数组的指针 总结 前言 当谈到C语言的高级特性时&#xff0c;函数指针和函数指针数组通常是最常见的话题之一。虽然这些概念可能会让初…

java面试题(24)

1、重写equals&#xff08;&#xff09;方法的原则 1、对称性&#xff1a; 如果x.equals&#xff08;y&#xff09;返回是“true”&#xff0c;那么y.equals&#xff08;x&#xff09;也应该返回是 “true”。 2、自反性&#xff1a; x.equals&#xff08;x&#xff09;必须…

【动态规划】第N个泰波那契数

&#x1f4ed;从这里开始&#xff0c;我们要开始学习动态规划辣。之后的动态规划有关的文章都是按照这个逻辑来写&#xff0c;首先来介绍一下基本逻辑。 &#x1f9c0;(1)题目解析&#xff1a;就是分析题目&#xff0c;读懂题目想让我们实现的功能 &#x1f9c0;(2)算法原理&…

linux 创建一个线程的基础开销探讨

测试代码 测试方法比较笨&#xff0c;每修改一次线程数&#xff0c;就重新编译一次&#xff0c;再运行。在程序运行过程中&#xff0c;查看到进程 pid&#xff0c;然后通过以下命令查看进程的运行状态信息输出到以线程数为名字的日志文件中&#xff0c;最后用 vimdiff 对比文件…

LVS负载均衡集群之LVS-DR部署

目录 一、lVS-DR集群概述 二、LVS-DR数据包流向分析 四、LVS-DR特性 五、DR模式 LVS负载均衡群集部 5.0配置虚拟 IP 地址&#xff08;VIP 192.168.14.180&#xff09; 5.1.配置负载调度器(192.168.14.101) 5.2部署共享存储&#xff08;NFS服务器&#xff1a;192.168.14.10…

7-3打怪升级(25分)【Floyd、dijkstra】【2021 RoboCom 世界机器人开发者大赛-本科组(初赛)】

考点&#xff1a;Floyd&#xff0c;dijkstra变式&#xff08;记录路径&#xff0c;多优先级&#xff09; 7-3 打怪升级 (25分) 很多游戏都有打怪升级的环节&#xff0c;玩家需要打败一系列怪兽去赢取成就和徽章。这里我们考虑一种简单的打怪升级游戏&#xff0c;游戏规则是&am…

数据在计算机中的存储——【C语言】

在前面的博客中&#xff0c;我们已经学习了C语言的数据类型&#xff0c;先让我们回顾一下C语言中有哪些数据类型。 目录 C语言的基本内置类型 类型的基本归类 整型在内存中的存储 原码、反码、补码 存储中的大小端 练习 浮点型在内存中的存储 浮点数的存储规则 对引例问…

【算法与数据结构】20、LeetCode有效的括号

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;括号匹配是使用栈解决的经典问题。做这道题首先要分析什么时候括号不匹配。1、右括号多余 ( { [ ] } )…

动态规划之96 不同的二叉搜索树(第7道)

题目&#xff1a; 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例&#xff1a; 递推关系的推导&#xff1a; n3时&#xff0c;如上图所示。 当1为头结点的时候&#x…

C#学习之路-常量

C# 常量 常量是固定值&#xff0c;程序执行期间不会改变。常量可以是任何基本数据类型&#xff0c;比如整数常量、浮点常量、字符常量或者字符串常量&#xff0c;还有枚举常量。 常量可以被当作常规的变量&#xff0c;只是它们的值在定义后不能被修改。 整数常量 整数常量可…

Mybatis-Plus查询

Mybatis-Plus Mybatis-Plus条件查询的书写方法 1.条件查询 直接new QueryQuery<>创建对象&#xff0c;然后再wrappee.eq(“数据库列表”,“匹配值”)创建条件就可以。 其中&#xff0c;基本查询&#xff1a;eq表示相等&#xff1b;gt表示大于&#xff1b;lt表示小于&a…

[Vue3]学习笔记-provide 与 inject

作用&#xff1a;实现祖与后代组件间通信 套路&#xff1a;父组件有一个 provide 选项来提供数据&#xff0c;后代组件有一个 inject 选项来开始使用这些数据 具体写法&#xff1a; 祖组件中&#xff1a; setup(){......let car reactive({name:奔驰,price:40万})provide(…

Leetcode刷题(Week1)——宽(深)度优先遍历专题

刷题时间&#xff1a; 2019/04/04 – 2019/04/07 主播&#xff1a;yxc(闫雪灿) 视频链接&#xff1a; https://www.bilibili.com/video/av32546525?fromsearch&seid14001345623296049881 题号题目链接127Word Ladderhttps://leetcode.com/problems/word-ladder/131Palind…

Integration Objects OPC 所有产品Crack

OPC产品 OPC UA 升级到 OPC UA 以提高互操作性和安全性。 OPC 隧道 无需 DCOM 即可实现安全可靠的连接。 OPC 数据归档 将 OPC 数据存储到标准数据库或 CSV 文件中。 OPC 服务器 将任何通信协议转换为OPC标准。 OPC 客户端 读取、写入和传输您的 OPC 数据。 OPC 服务器工具…

四十五、时间/空间复杂度分析

算法主要内容 一、时间复杂度分析1、由数据范围反推算法复杂度以及算法内容2、如何分析代码复杂度&#xff08;1&#xff09;看循环&#xff08;2&#xff09;看递归&#xff08;3&#xff09;一些看似为O(n^2)&#xff0c;但实际为O(n)&#xff08;4&#xff09;数据结构&…

HPM6750系列--第五篇 使用Segger Embedded Studio for RISC-V开发环境

一、目的 之前的博文中《HPM6750系列--第四篇 搭建Visual Studio Code开发调试环境》我们介绍了如何使用visual studio code进行开发调试&#xff0c;但是用起来总缺少点感觉&#xff0c;那么有没有更加友好一些的IDE用来开发呢&#xff1f; 本篇主要介绍如何使用Embedded Stud…

Stable Diffusion 模型界面介绍

Stable Diffusion 模型界面介绍 界面1 图1 Stable Diffusion 模型界面1 ①&#xff1a;选择的模型&#xff0c;及Stable Diffusion进行生成图片是使用的模型。其中.ckpt为大模型 ②&#xff1a;prompt --> 正向提示词。表示你的想法&#xff0c;你想要生成一副什么样的图…

更快更准更简单的工业异常检测新SOTA:SimpleNet

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/pdf/2303.15140.pdf 代码链接&#xff1a;https://github.com/DonaldRR/SimpleNet 0.背景&#xff1a; 图像异常检测和定位任务旨在识别异常图像并定位异常子区域。…

eNSP-交换机VLAN配置

eNSP-交换机VLAN配置 文章目录 eNSP-交换机VLAN配置一、题目要求二、拓扑结构三、基础配置四、测试验证五、知识点详解1.VLAN2.VLAN的端口成员模式3.不同端口成员模式对报文的处理 一、题目要求 1.PC1可以访问PC2&#xff0c;PC4,但是不能访问PC3 2.PC2可以访问PC1&#xff0…