指教这段代码的意思case integer of在这是什么意思(100分)

  • 主题发起人 主题发起人 gxgxfish0813
  • 开始时间 开始时间
G

gxgxfish0813

Unregistered / Unconfirmed
GUEST, unregistred user!

type
TVariantRecord=record
UnllStrField:PChar;
IntField:Interger;
case Integer of
0: (D: Double);
1: (I: Integer);
2: (C: Char);
end;
我想知道这段代码的意思。
0: (D: Double);
1: (I: Integer);
2: (C: Char);   怎么解释呢。是不是判断Integer为什么类型,如果为双精

度就定义变量D,如果是整数就定义I,如果是字符就定义C呢。。。那Integer里面所传的

值是怎么控制的呢
 
这是一个变体记录
有三个元素,
这第三个元素类型不确定,可以是double,也可以是integer,也可以是char型
这是由实际需要确定的

integer传的值你不需要控制的,他的不确定性体现在你的使用上
也就是说你可以给这第三个元素赋以上三种类型的数值,
 
还是不懂....能举一个例子吗??实例
对了,有点想通了,请问,是不是这样:
第三个元素在使用时,可以随便赋给以上三种的类型,在运行时就可以随意转变呢.
不过我想知道,第三个元素怎么来访问它??
比如我想把一个int的给它是不是写VariantRecord.I:=10;
比如我想把一个double的给它是不是写VariantRecord.D:=10;你说我这样对不对...

 
学习一下
 
同意来如风.
 
对的,就是这样
 
type
TVariantRecord=record
UnllStrField:PChar;
IntField:Interger;
D: Double
// integer=0时的实际情况
end;

Type
TVariantRecord=record
UnllStrField:PChar;
IntField:Interger;
I: Integer
// integer=1时的实际情况
end;

Type
TVariantRecord=record
UnllStrField:PChar;
IntField:Interger;
C: Char
// integer=2时的实际情况
end;
 
MyVariant.D := 10.00;
MyVariant.I := 10;
MyVariant.C := '1';
ShowMessage(FloatToStr(MyVariant.D) + ': ' + IntToStr(MyVariant.I) + ':' + MyVariant.C);
我自己测试一下,按照上面的代码。这个 IntToStr(MyVariant.I)显示的是49;
好象在变体类型里面的数据存储还是有一定规则的吧!以前我看过C语言的,但
我忘记了!

 
其实不是这样的。
是D,I,C共用一个存储空间。例如,把D赋值为66以后,那么I为66,C为"B",即C为Char(66)。
 
kk2000的测试结果中I输出的是C中保存字符的ASCII码
 
TO:Highpeak 十分同意你的看法! 就是“共用一个存储空间”
TO: blyb 你说的对,其实第三个元素所包含的三个值是以
最后那个在最后所赋的值来确定的,因为他们共用一个内存。
但是这个内存的长度,就是以那个需要最大空间的那个变量
来分配。我已经明白了。
 
已经 解决了!!谢谢来如风了
 
后退
顶部