菜鸟提问 ( 积分: 50 )

  • 主题发起人 主题发起人 laibao
  • 开始时间 开始时间
L

laibao

Unregistered / Unconfirmed
GUEST, unregistred user!
function SumAll (const Args: array of const): Extended;
var
I: Integer;
begin
Result := 0;
for I := Low(Args) to High (Args) do
case Args .VType of
vtInteger: Result :=
Result + Args .VInteger;// Args .VInteger是什么意思?
vtBoolean:
if Args .VBoolean then { 这里为什么要用If语句,不象别的直接写成
Result := Result + Args .VBoolean+1;}
Result := Result + 1;
vtChar:
Result := Result + Ord (Args .VChar);//为什么要用Ord例程?
vtExtended:
Result := Result + Args .VExtended^;//为什么要用指针取值?
vtString, vtAnsiString:
Result := Result + StrToIntDef ((Args .VString^), 0);//那个0是什么意思?
vtWideChar:
Result := Result + Ord (Args .VWideChar);
vtCurrency:
Result := Result + Args .VCurrency^;
end; // case
end;
 
function SumAll (const Args: array of const): Extended;
var
I: Integer;
begin
Result := 0;
for I := Low(Args) to High (Args) do
case Args .VType of
vtInteger: Result :=
Result + Args .VInteger;// Args .VInteger是什么意思?
vtBoolean:
if Args .VBoolean then { 这里为什么要用If语句,不象别的直接写成
Result := Result + Args .VBoolean+1;}
Result := Result + 1;
vtChar:
Result := Result + Ord (Args .VChar);//为什么要用Ord例程?
vtExtended:
Result := Result + Args .VExtended^;//为什么要用指针取值?
vtString, vtAnsiString:
Result := Result + StrToIntDef ((Args .VString^), 0);//那个0是什么意思?
vtWideChar:
Result := Result + Ord (Args .VWideChar);
vtCurrency:
Result := Result + Args .VCurrency^;
end; // case
end;
 
Args.VInteger: Args应该是一个对象数组,而VInteger应该是Args这一元素的某个属性。
Args .VBoolean:VBoolean应该是一个布尔类型的属性,所以要加if。
因为返回值是Extended类型,而Args.VChar应该是一个字符型,所以要转化成它的序号才能直接相加。
StrToIntDef((Args.VString^), 0):0表示默认值是0。
 
--Args .VBoolean:VBoolean应该是一个布尔类型的属性,所以要加if。
-{ 这里为什么要用If语句,不象别的直接写成
-Result := Result + Args .VBoolean+1;}
Boolean类型,零为False,非零为True,所以直接加是不对的。应该加上一个if语句判断。

-为什么要用Ord例程?
转换为Cardinal类型,然后相加,否则编译估计通不过。

-为什么要用指针取值?
关注
 
多人接受答案了。
 
后退
顶部