case Integer of 是什么意思?(20分)

  • 主题发起人 主题发起人 jeff168
  • 开始时间 开始时间
J

jeff168

Unregistered / Unconfirmed
GUEST, unregistred user!
谁帮我说说这是什么意思:
case Integer of
1:...;
2:...;
end;
 
相当于c的union,但是1、2、3、...却没什么用
 
type
a=record
case integer of
0:...;
1:...;
end;
end;
 
[:(]看不懂两个回答
 
结构中不同的变量使用相同的内存区域,相当于C中的联合。
 
联合我倒知道一点,但跟这有什么关系呢?
 
变体记录。 去查一下PASCAL手册!
 
case Integer of
1:(a:integer);
2:(b:array[0..3]of char);
end;
相当于c的
union
{
int a;
char[4] b;
}
至于delphi 里面的1、2则没什么大用,但是不能少
 
case Integer of
1:...
2:...
end;
好像等于:
case sizeof(Integer) of
1:...
2:...
end;
 
type
a=record
case integer of
0:...;
1:...;
end;
end;
下面是我的理解:
a是一个record,它有一个字段,是INTEGER型的,case integer of 是用来判断
当这个字段值为0和1的时候各做什么操作。
下面是record的定义,供参考
type recordTypeName = record

fieldList1: type1;
...
fieldListn: typen;
end
 
to VarPhone:
sizeof(integer)是一个定值,更不可能是0
to PiPi
不大象C中的联合体。因为在C中,那些是变量。
左右手说得有一定的道理,我原来也是这样想的,
只是CASE INTEGER OF 中的INTEGER太不可理解了。

在DELPHI中的System中有这样一段源代码:
PVarData = ^TVarData;
TVarData = packed record
VType: Word;
Reserved1, Reserved2, Reserved3: Word;
case Integer of
varSmallint: (VSmallint: Smallint);
varInteger: (VInteger: Integer);
varSingle: (VSingle: Single);
varDouble: (VDouble: Double);
varCurrency: (VCurrency: Currency);
varDate: (VDate: Double);
varOleStr: (VOleStr: PWideChar);
varDispatch: (VDispatch: Pointer);
varError: (VError: LongWord);
varBoolean: (VBoolean: WordBool);
varUnknown: (VUnknown: Pointer);
varByte: (VByte: Byte);
varString: (VString: Pointer);
varAny: (VAny: Pointer);
varArray: (VArray: PVarArray);
varByRef: (VPointer: Pointer);
谁给我说说是什么意思?
 
CASE INTEGER OF
1:
2:
3:
是做样子的,1、2、3跟着的成员的定义才是有用的
你可以自己去看看那些c和delphi都有的定义,就知道是不是c的union了
 
type
TRCD=record
case Integer of
1:(a:integer);
2:(b:array[0..3]of char);
end;
变体记录,
VAR MYRCD:TRCD;
有一个标记字段I我们不用知道它叫什么名字
当我们这样用的时候,I=1
MYRCD.A:=999;
当我们这样用的时候,I=2
MYRCD.b:='999';
 
to jeff168:
我认为这个INTEGER是个省略的写法,应该是用INTEGER来声明一个变量,然后再用CASE,
但是因为INTEGER本身也是一个变量,所以就直接用了它。
在SYSTEM单元的开始有这样的一段话
{ Predefined constants, types, procedures, }
{ and functions (such as True, Integer, or }
{ Writeln) do not have actual declarations.}
{ Instead they are built into the compiler }
{ and are treated as if they were declared }
{ at the beginning of the System unit. }
也就是说INTEGER在这里是预定义的,并没有实际的声明,但是在编译的时候会把
它看成已经声明了的。
 
990说的是对的,
就是变体记录.
我在深圳书城查了一下Pascal的书.
多谢各位热心的大哥.
 
后退
顶部