关于可变开放数组参数的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 ZBJ2001_KF
  • 开始时间 开始时间
Z

ZBJ2001_KF

Unregistered / Unconfirmed
GUEST, unregistred user!
在HELP中查到
TVarRec = record { do not pack this record
it is compiler-generated }
case Byte of
vtInteger: (VInteger: Integer
VType: Byte);
vtBoolean: (VBoolean: Boolean);
vtChar: (VChar: Char);
vtExtended: (VExtended: PExtended);
vtString: (VString: PShortString);
vtPointer: (VPointer: Pointer);
vtPChar: (VPChar: PChar);
vtObject: (VObject: TObject);
vtClass: (VClass: TClass);
vtWideChar: (VWideChar: WideChar);
vtPWideChar: (VPWideChar: PWideChar);
vtAnsiString: (VAnsiString: Pointer);
vtCurrency: (VCurrency: PCurrency);
vtVariant: (VVariant: PVariant);
vtInterface: (VInterface: Pointer);
vtWideString: (VWideString: Pointer);
vtInt64: (VInt64: PInt64);
end;

下有这样的一个例子:
FUNCTION SUMALL(CONST ARGS:ARRAY OF COSNT):EXTENDED;
VAR
I:INTEGER;
BEGIN
RESULT:=0;
FOR I:=LOW(ARGS) TO HIGH(ARGS) DO
BEGIN
CASE ARGS.VTYPE OF
VTINTEGER:RESULT:=RESULT+ARGS.VINTEGER;
VTCHAR:RESULT:=RESULT+ORD(ARGS.VCHAR);
....
END;
END;
END;
调用是:SUMALL([100*100,'A'])
该函数是通过参数列表中的数会判断出传递的数据类型,然后进行相应的运算.数据类型是VTYPE判断的.不明白?怎么样能VTYPE等于0,1...
我不知道ARGS.VTYPE 的值是怎么得到的.
 
在HELP中查到
TVarRec = record { do not pack this record
it is compiler-generated }
case Byte of
vtInteger: (VInteger: Integer
VType: Byte);
vtBoolean: (VBoolean: Boolean);
vtChar: (VChar: Char);
vtExtended: (VExtended: PExtended);
vtString: (VString: PShortString);
vtPointer: (VPointer: Pointer);
vtPChar: (VPChar: PChar);
vtObject: (VObject: TObject);
vtClass: (VClass: TClass);
vtWideChar: (VWideChar: WideChar);
vtPWideChar: (VPWideChar: PWideChar);
vtAnsiString: (VAnsiString: Pointer);
vtCurrency: (VCurrency: PCurrency);
vtVariant: (VVariant: PVariant);
vtInterface: (VInterface: Pointer);
vtWideString: (VWideString: Pointer);
vtInt64: (VInt64: PInt64);
end;

下有这样的一个例子:
FUNCTION SUMALL(CONST ARGS:ARRAY OF COSNT):EXTENDED;
VAR
I:INTEGER;
BEGIN
RESULT:=0;
FOR I:=LOW(ARGS) TO HIGH(ARGS) DO
BEGIN
CASE ARGS.VTYPE OF
VTINTEGER:RESULT:=RESULT+ARGS.VINTEGER;
VTCHAR:RESULT:=RESULT+ORD(ARGS.VCHAR);
....
END;
END;
END;
调用是:SUMALL([100*100,'A'])
该函数是通过参数列表中的数会判断出传递的数据类型,然后进行相应的运算.数据类型是VTYPE判断的.不明白?怎么样能VTYPE等于0,1...
我不知道ARGS.VTYPE 的值是怎么得到的.
 
没人参与.最近DFW好象与以前不大一样了.
 
我的问题为什么没人理呀. 不知道为什么.我的好多问题都没人回答.
 
编译器会把传入函数或过程中的常量数组中的所有隐式转换成tvarrec类型,就是你上边写的,其中vtype字段表示tvarrec包含何中类型数据,
const
{TVarRec.vType values}
vtInteger = 0;
vtBoolean = 1;
Vtchar = 2;
vtExtended = 3 ;
..............//懒得再写了,见谅;
end;
下边你就应该明白了把
注:资料来自delphi 6 开发人员指南
 
多人接受答案了。
 
后退
顶部