是这样子的,我在做huffman树的压缩.结果建完树之后我发现有些叶子结点的权值为零,所以我又必须添加一段去掉权值为零的叶子结点的程序,可这样一来我就不知道装叶子结点的数组大小具体该为多大,请大家看看这段程序!function delzero(A:array of byte;var clrcount:array of Lcolor):integer;
//函数这样定义是不仅可以返回clrcount这个数组的大小(也就是那个integer型的返回值)而且还返回了那个数组?那我在调用这个函数之前应该为对应clrcount的实参分配大小吧,可我还没得到返回值如何分配?不分配会不会出错?
var
i,j:integer;
cindex,index:integer;
begin
for i:=0 to 7 do//不去掉为零的叶子前我确定树组就七个元素;
begin
clrcount[i].color:=i;//进行初始化;
clrcount[i].times:=0;
end;
for j:=0 to (imgsize div 3)-1 do
begin
cindex:=(A[j]and$0F0)shr 5;
inc(clrcount[cindex].times,1);//计算每种颜色使用的频数
end;
index:=0;
for i:=0 to 7 do
begin
if (clrcount[i].times<>0)then
begin
clrcount[index]:=clrcount[i];
clrcount[i].times:=0;
inc(index);
end;
end;
result:=index;
end;
procedure TForm1.Button7Click(Sender: TObject);
var
......
begin
countcolor(hsvdata,clrcount1,index);//调用了上面定义的那个函数,问题是我要先给clrcount1这个数组先分配大小才能使用把,可我还不知道它的大小呢!
......
//函数这样定义是不仅可以返回clrcount这个数组的大小(也就是那个integer型的返回值)而且还返回了那个数组?那我在调用这个函数之前应该为对应clrcount的实参分配大小吧,可我还没得到返回值如何分配?不分配会不会出错?
var
i,j:integer;
cindex,index:integer;
begin
for i:=0 to 7 do//不去掉为零的叶子前我确定树组就七个元素;
begin
clrcount[i].color:=i;//进行初始化;
clrcount[i].times:=0;
end;
for j:=0 to (imgsize div 3)-1 do
begin
cindex:=(A[j]and$0F0)shr 5;
inc(clrcount[cindex].times,1);//计算每种颜色使用的频数
end;
index:=0;
for i:=0 to 7 do
begin
if (clrcount[i].times<>0)then
begin
clrcount[index]:=clrcount[i];
clrcount[i].times:=0;
inc(index);
end;
end;
result:=index;
end;
procedure TForm1.Button7Click(Sender: TObject);
var
......
begin
countcolor(hsvdata,clrcount1,index);//调用了上面定义的那个函数,问题是我要先给clrcount1这个数组先分配大小才能使用把,可我还不知道它的大小呢!
......
countcolor(hsvdata,clrcount1);