主题:[讨论]疑惑!!!!>>??????
tl3shi
[专家分:110] 发布于 2006-08-21 21:32:00
有谁知道fillchar()的用法!!?
fillchar(a,sizeof(a),0);就是把一个A数组赋值为0;
要是改变后面的数字"0" 为什么没有规律啊!!
回复列表 (共5个回复)
沙发
济公二世 [专家分:200] 发布于 2006-08-22 12:44:00
这只是一个数组清零的过程,如果改其他数,系统会取随机数的。
板凳
贺天行宝 [专家分:2300] 发布于 2006-08-22 20:23:00
不对,也可以赋值其他数,比如-1是$FF,比较讨厌,记住就行了
3 楼
tl3shi [专家分:110] 发布于 2006-08-22 21:48:00
不懂啊??
4 楼
lmj9201 [专家分:1400] 发布于 2006-08-29 12:31:00
我发现了一个好玩的地方
fillchar(a,sizeof(a),0);
里面的第二个a可以任意改变,只要是你定义的数组就行
比如
var
a,b:array[1..10]of integer;
begin
a[1]:=1;b[1]:=1;
fillchar(a,sizeof(b),0);
write(a[1],b[1]);
end.
结果是0,1
fillchar(a,sizeof(b),0);的效果是清前面的a而不是b
5 楼
maxumi [专家分:2200] 发布于 2006-09-07 08:29:00
fillchar(x,y,z)的作用是:
从数组x(或变量x)的第1个字节开始,连续y个字节赋值为z.
而 sizeof() 函数是取某变量或数组占用的内存长度.
4楼说的是错误的, 4楼的程序之所以可以使用是因为a数组与b数组的长度正好相等, 如果b数组有100000个元素, 那么从a数组开始连续200000字节将变为0, 后果就是, 很有可能Windows正在使用的内存就被覆盖掉了......
你说的没有规律, 其实并非如此, 想必你是在integer/longint数组上用的.
例如x是integer数组, fillchar(x,sizeof(x),7)将integer的2个字节都赋值为7, 则数值其实是256*7+7=1799.
一个integer占用16位2进制位, 7化为2进制等于00000111, 所以x数组的每个变量变成了0000011100000111(2进制), 化为10进制为1799.
fillchar是给每一个字节都赋值,integer占用2字节, 应该用fillword, 它和fillchar差不多, 只是每2个字节赋值一次, longint数组请用filldword, filldword是每4个字节赋值一次.
当然,用fillword和filldword的前提是: 你用的是Free Pascal. Turbo Pascal不支持这两个过程.
脸皮厚的人请求+30~~~~~
我来回复