回 帖 发 新 帖 刷新版面

主题:[讨论]疑惑!!!!>>??????

有谁知道fillchar()的用法!!?
     fillchar(a,sizeof(a),0);就是把一个A数组赋值为0;
  要是改变后面的数字"0" 为什么没有规律啊!!

回复列表 (共5个回复)

沙发

这只是一个数组清零的过程,如果改其他数,系统会取随机数的。

板凳

不对,也可以赋值其他数,比如-1是$FF,比较讨厌,记住就行了

3 楼


 不懂啊??

4 楼

我发现了一个好玩的地方
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 楼

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~~~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册