【实用+开源】5个小时写的实用库,利用Pchar模拟动态数组
pascal吧
全部回复
仅看楼主
level 8
徐一凡_exe 楼主
https[彩虹]://pan.baidu.com/s/1pLQ8vEj
三楼开源。
2017年04月22日 05点04分 1
level 8
徐一凡_exe 楼主
2017年04月22日 05点04分 2
level 8
徐一凡_exe 楼主
unit pchar_unit;
interface
uses strings;
type avarsize=0..63;
plast=record//动态数组类型
dobuild:boolean;
lastsize:qword;
varsize:avarsize;
last:pchar;
end;
procedure buildlast(var thelast:plast;thelastsize:qword;thevarsize:longword);
//建立动态数组thelast,下标为[1..thelastsize],每个元素长thevarsize字节。
procedure buildlast_from(var thelast:plast;thelastsize:qword;thevarsize:longword;from:pointer);
//建立动态数组,并用form处的元素填充入数组首部。(用于正常数组与它的转换)
procedure buildlast_fill(var thelast:plast;thelastsize:qword;thevarsize:longword;avar:int64);
//建立动态数组,用avar填充每一个元素。(用于清零)
procedure edit(var thelast:plast;x:qword;date:int64);
//编辑thelast中第x个元素为data。
procedure lastfill(var thelast:plast;thevar:int64);
//用thevar填充每一个元素。(用于清零)
procedure dislast(var thelast:plast);
//释放thelast。
function size(thelast:plast):qword;
//获取thelast的下标数量。
function varsize(thelast:plast):avarsize;
//获取thelast每个元素的长度(字节)。
function dobuild(thelast:plast):boolean;
//判断thelast是否建立。
function get(thelast:plast;x:qword):int64;
//获取thelast的第x个元素
function copy(thelast:plast;x,y:qword):plast;
//获取thelast从下标x到下标y的子数组
2017年04月22日 06点04分 3
//请配合强之类转换使用
2017年04月22日 06点04分
百度偏说我在发广告,实现部分发不出来了[怒]
2017年04月22日 06点04分
level 8
徐一凡_exe 楼主
新增函数:
function getpchar(thelast:plast):pchar;
//强制转换动态数组为pchar,例子:数值100255转换为字符ord(10025)。
要不吧友要看什么函数的实现,我再发出来?
2017年04月22日 12点04分 4
错了,是chr(10025)。
2017年04月24日 05点04分
level 8
徐一凡_exe 楼主
使用例子:用本单元的数组输出1至10:
uses pchar_unit;
var l:plast;
a:array[1..10]of shortint;
i:shortint;
begin
for i:=1 to 10 do a[i]:=i;//先初始化数组
buildlast_from(l,10,sizeof(a[1]),@a);
//从a数组的首地址开始,取10个元素,每个元素为a的每个元素的大小,存入l中。
for i:=1 to 10 do write(get(l,i),' ');//依次输出
end.
输出:1 2 3 4 5 6 7 8 9 10
2017年04月22日 12点04分 5
level 8
徐一凡_exe 楼主
差点忘了补上库名:pchar_unit
2017年04月22日 12点04分 6
level 15
楼主你这技术已经不是小学生了
2017年04月23日 01点04分 7
并不是,我用了strings库来实现最基础的功能,只不过是作为一个strings库的扩充而已,而且每个函数平均才5行左右。
2017年04月23日 12点04分
而且是丝毫没有优化的最朴实的方法。
2017年04月23日 12点04分
而且作为小学生的我在最基础的信息学常识上被坑了,我把内存的方向弄反了[汗]。索性将错就错,把短短的一行strcopy过程写成了4行的循环。
2017年04月23日 12点04分
回复 徐一凡_exe 二层回复:因为要是优化的话,就不是在一个普通的竞赛选手的认知范围之内,那是Free Pasca开发l团队所具备的的知识范围内了。
2017年04月23日 12点04分
level 14
楼主我读书少,你不要骗我。[滑稽]
2017年04月23日 14点04分 9
是这个库有bug吗[滑稽]
2017年04月24日 04点04分
@徐一凡_exe 没有。是我想多了。这样编程序的劲头是很好的、照这样一步步学下去自然会了解更多、泥会变得更腻害。[熊-鼓掌]
2017年04月24日 05点04分
前年我也发了很多帖子,但因为竞赛,我潜水了一年。[滑稽]
2017年04月26日 12点04分
@徐一凡_exe 现在我这个大水逼又要来水啦![哈哈][滑稽]
2017年04月26日 12点04分
level 11
这不是浪费空间吗[滑稽]
2017年04月25日 11点04分 10
你是说buildlast_form过程可以精简掉?
2017年04月26日 11点04分
@徐一凡_exe 对 因为你的示例程序中还是有数组[滑稽]
2017年04月26日 12点04分
@myetyet 但是这个单元的其他过程要用它。
2017年04月26日 12点04分
level 8
徐一凡_exe 楼主
新的版本已上传。
新增函数:
function merge(thelast1,thelast2:plast):plast;
//连接并返回thelast1和thelast2
!!!!!函数改动:copy函数改为pascal string的copy的风格,不再这么直观了
大幅改动:把plast的储存方式反转了,但兼容上一版本。
代码量增加到了155行。
2017年04月26日 12点04分 11
感叹号表示警告的意思。
2017年04月26日 12点04分
level 4
动态数组不是array of typename吗?
2017年04月29日 11点04分 12
我只是水贴,不要这么认真![喷]
2017年05月01日 12点05分
1