主题:求助————高手!!
FREE—MAN
[专家分:30] 发布于 2005-07-14 16:35:00
[em18][em18][em18]
fillchar是什么一回事?
还有: fillchar中的"sizeof"是什么意思??
请各位高手指教以一下!!!!
————Thanks
[em4][em1][em2][em16][em18][em13][em18]
回复列表 (共5个回复)
沙发
impala [专家分:110] 发布于 2005-07-15 01:11:00
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过程的一般应用也就这些了,希望我的介绍对你有用
板凳
FREE—MAN [专家分:30] 发布于 2005-07-15 20:14:00
谢谢!!!!
但为什么我的这样:
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 楼
iRabbit [专家分:60] 发布于 2005-07-15 22:56:00
fillchar一般只能用来填0 false true
4 楼
impala [专家分:110] 发布于 2005-07-17 09:16:00
楼上说的不太对,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 楼
davidw017 [专家分:4170] 发布于 2005-07-21 17:21:00
所以,放弃 Pascal 使用 C++ 吧…………
我来回复