一点疑惑!请帮忙 .(100分)

  • 主题发起人 主题发起人 poy
  • 开始时间 开始时间
P

poy

Unregistered / Unconfirmed
GUEST, unregistred user!
经常看到一些 类型如 :
type myRec =record
Name :String ;
case integer of
0 : m1 :LongInt;

1 : m1 :Word ;
M2 :word ;
end;
一直不理解 Case Integer of 什么意思 ?请各位解惑 .
var test :MyRec ;
test.m1= 100 ;和 test.m1 =100000 ;有什么区别 .
 
没人能说出个道道来吗?
 
大富翁就这种水平吗?
 
不是大富翁的问题,是你提的问题。。。。
case integer of
就像是C语言里的联合体,
比如:
case integer of
0 : m1 :LongInt;

1 : m1 :Word ;

表示m1这个内存区存的是longint 或者word.
 
这点我知道,可我不明白什么时候是longing 什么时候是word
 
就象联合一样自动识别
 
那要看你需要什么类型了。它们允许的范围是不一样的。
 
不关大富翁水平的问题,因为问题很简单,和c的联合类型是样的,
举个例子:
type
TmyRec =record
case integer of
0: (M1:DWORD);
1: (M2:WORD;);
2: (M3:BYTE;);
end;

这里,M1,M2,M3共用一个内存空间
假设:MyRec.M1:=$12345678;
则: MyRec.M2:=$5678;
MyRec.M3:=$78;
和c的联合没什么区别吧
 
>>可我不明白什么时候是longing 什么时候是word
很简单,看你这个所谓的联合体长度是多大,如果是4个字节,一般用integer,
case integer of 里面的integer是为了告诉编译器,这个结构部分需要多大的字节
也就是说Bxch_1000的例子应该修改成:
type
TmyRec =record
case integer of
0: (M1:DWORD);
1: (M1:array [0..1] of WORD);
2: (M3:array [0..3] of BYTE);
end;

 
大家说的有些道理,不过这些问题很少有人问,大家也就不太关心了
 
同意一个过客意见
把上面的例子扩充一下
TMyDWord = record
Lo: WORD;
Hi: WORD;
end;

TmyRec =record
case integer of
0: (M1:DWORD);
1: (MyDWord: TMyDWord;);
end;

现在 M1和MyDword共用一个内存空间
MyRec.MyDWord.Hi;
// M1的高16位
MyRec.MyDWord.Lo;
// M1的低16位
这个例子应该清楚的说明问题了吧
 
多谢 !!!!bxch_1000 和一个过客 !
 

Similar threads

后退
顶部