从0开始<十四>:模仿malloc和 free函数、strlen函数[通俗易懂]

程序一:编写函数char*alloc(n)和voidafree(char*p)函数,这两个函数类似于malloc和free函数,其中第一个函数返回一个指向n个连续存储单元的指针,第二个函数释放已经分配单元的指针。思路:最容易实现方法是让一个大字符数组allocbuf中的空间进行分配。该数组是alloc和afree两个函数的私有数组。由于函数alloc和afree处理的对象时指针而不是

大家好,又见面了,我是你们的朋友全栈君。

程序一:编写函数char *alloc(n) 和 void afree(char *p)函数,这两个函数类似于malloc和free函数,其中第一个函数返回一个指向n个连续存储单元的指针,第二个函数释放已经分配单元的指针。

思路:最容易实现方法是让一个大字符数组allocbuf中的空间进行分配。该数组是alloc和afree两个函数的私有数组。由于函数alloc和afree处理的对象时指针而不是数组下标,因此,其他函数无需知道该数组的名字,这样,可以在包含alloc和afree的源文件中对该数组声明为static类型,使得它不对外可见。如下图:


#define ALLOCSIZE 10000 /*可用空间大小*/

static char allocbuf[ALLOCSIZE];  /*alloc使用的存储区*/
static char *allocp = allocbuf; /*下一个空闲位置*/

char *alloc(int n) /*返回指向n个字符的指针*/
{
	if (allocbuf + ALLOCSIZE - allocp >= n)
	{
		allocp += n;
		return allocp-n;
	}
	else
		return 0;
}

void afree(char *p)
{
	if (p>=allocbuf && p<allocbuf+ALLOCSIZE)
		allocp = p;
}

程序二:strlen函数

int strlen(char *s)
{
	char *p = s;
	while (*p++);
	
	return p - s - 1;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127563.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytest skipif_pytest conftest.py文件

    pytest skipif_pytest conftest.py文件前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

    2022年7月30日
  • LINUX系统镜像下载总汇

    LINUX系统镜像下载总汇

    2021年11月24日
  • javascript正则表达式 教程_js正则表达式匹配字符串

    javascript正则表达式 教程_js正则表达式匹配字符串JavaScript正则表达式的模式匹配引言正文一、正则表达式定义引言其实我写这篇文章的话,主要是想自己重新复习一遍正则表达式。我们也知道正则表达式在很多语言中都是通用的,所以学好这个好处很多。接下来,就跟我一起来学习一下正则表达式,从0到入门吧。正文一、正则表达式定义正则表达式(regularexpression)是一个描述字符模式的对象,简单点来讲就是通过正则表达式规定的模式,…

    2022年9月20日
  • SQLServer里面添加约束条件[通俗易懂]

    SQLServer里面添加约束条件[通俗易懂]1.主键约束:格式为:altertable表格名称addconstraint约束名称增加的约束类型(列名)例子:altertableempaddconstraintpppprimarykey(id);2.check约束:就是给一列的数据进行了限制格式:altertable表名称addconstraint约束名称增加的约束类型(列名)例子:altert…

    2022年10月13日
  • Qt QTreeWidget 详解[通俗易懂]

    Qt QTreeWidget 详解[通俗易懂]一.基础设置1.添加顶层节点//添加顶层节点QTreeWidgetItem*topItem1=newQTreeWidgetItem(ui->treeWidget);topItem1->setText(0,”百度”);ui->treeWidget->addTopLevelItem(topItem1);2.设置表头隐藏,展开所有项//隐藏表头ui->treeWidget->setHeade.

    2022年10月1日
  • oracle数据库查询语句大全_oracle查询是否存在记录

    oracle数据库查询语句大全_oracle查询是否存在记录1oracle数据库查询表的所有数据–select*from表名;(*代表所有)2oracle数据库查询表中指定字段的值–select字段名1,字段名2,……from表名;3oracle数据库往表中添加数据信息–(添加信息使用insertinto语句)insertinto表名values(添加相对应的数据信息,如果在一个字段名中没有信息可以用“null”nul…

    2022年9月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号