回 帖 发 新 帖 刷新版面

主题:求助————高手!!

[em18][em18][em18]
fillchar是什么一回事?
还有: fillchar中的"sizeof"是什么意思??
请各位高手指教以一下!!!!
                                ————Thanks
[em4][em1][em2][em16][em18][em13][em18]

回复列表 (共5个回复)

沙发

fillchar函数是对数组进行整体操作的过程,它可以将整块的数组赋值于同一个值,例如:
program x1;
var a : array[1..10] of byte;
    i :byte;
begin
     fillchar(a,sizeof(a),0);
     for i:=1 to 10 do write(a[i]);
     writeln;
end.
则屏幕上输出十个0
sizeof是一个函数,该函数返回数组容量的大小。此例中,sizeof(a)的返回值是10,将上面程序中的fillchar(a,sizeof(a),0)语句换成fillchar(a,10,0)的作用是一样的。
又如:
program x2;
var i : byte;
    a : array[1..10] of byte;
begin
     for i:=1 to 10 do a[i]:=1;
     fillchar(a,5,0);
     for i:=1 to 10 do write(a[i]);
     writeln;
end.
则屏幕上输出:0000011111
这是基本的应用,如果用于多维数组,则会有不同的用法。例如:
program x3;
var i, j : byte;
    a : array[1..3,1..3] of byte;
begin
     fillchar(a,sizeof(a),0);
     for i:=1 to 3 do
         begin
              for j:=1 to 3 do
                  write(a[i,j]);
              writeln;
         end;
end.
则屏幕输出:
000
000
000
又如程序:
program x4;
var i, j : byte;
    a : array[1..3,1..3] of byte;
begin
     fillchar(a,sizeof(a),0);
     fillchar(a[2],sizeof(a[2]),1);
     for i:=1 to 3 do
          begin          
                for j:=1 to 3 do
                    write(a[i,j]);
                writeln;
          end;
end.
则屏幕输出:
000
111
000
若输出格式换一下,则能输出:
010
010
010
fillchar过程的一般应用也就这些了,希望我的介绍对你有用

板凳

谢谢!!!!
但为什么我的这样:
var
  s:array[1..5] of integer;
  i:integer;
begin
  fillchar(s,sizeof(s),1);
  for i:=1 to 5 do write(s[i],' ');
end.
输出的不是:1 1 1 1 1
而是:257 257 257 257 257

3 楼

fillchar一般只能用来填0 false true

4 楼

楼上说的不太对,fillchar,不光可以填写0,true,false,而且可以填其它数,但是是有条件的,byte型占一个字节为8位,最大可表示数为256,二进制形式是00000000,而integer是占两个字节的为16位,最大可表示数为65536,二进制形式是00000000,00000000。当用fillchar填充这两种类型时,比如填充1则byte为00000001,integer为00000001,00000001。那么,integer填充后的结果自然就是257。
类似的,用longint型则使用fillchar(data,sizeof(data),1)结果是
00000001,00000001,00000001,00000001
即16843009。
不知是否理解??


5 楼

所以,放弃 Pascal 使用 C++ 吧…………

我来回复

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