谢谢
解决方案 »
- 在MDI窗体下怎么判断要打开的窗体是否已打开
- 请问TWinSocketStream.read(strbuf,100)能读strbub中的回车符吗?
- TPanel界面效果如何实现??
- 芳,今天是我们恋爱二周年,再次说声:我爱你!
- 请问控件得到焦点发生什么事件?
- 一个小问题,但是不好解决。webbrowser如何去掉3d边框。提示:
- 请问大家有关增加组件滚动条的思路
- 有关TCriticalSection的一个问题:两次enter和两次leave的问题。。。
- 我的msdn里面没内容了,运行 dexplore.exe 打开了程序,可是里面是空的
- 如何在DBgrid单元中校验数据,和更新记录时扑获错误
- 如何让控件在设计时和运行时表现一致?
- 21CMM遭封杀!
不过有和联合类型相同作用的变体记录
如下:
type
TUnion = record
case integer of
0: (W: Word);
1: (C1, C2: Char);
2: (B1, B2: Byte);
end;简单的说B1和C1是共享同一内存地址空间
B2和C2也是
W和C1+C2和B1+B2共享同一内存地址例如
对
var
a: TUnion
begin
a.C1 := 'A';
a.C2 := 'B';
那么
a.B1就是字符A的ASCII码,即65 16进制是$41
a.B2就是字符A的ASCII码,即66 16进制是$42
a.W则是由2个bytes组合的一个字的值16961 16进制是$4241
实际的物理内存难道还懂数据类型吗?
实际内存就是1个1个的Bytes组成的,它不会管你是char还是integer或者还是别的什么。
你看书上解释char和integer等类型时也会这样跟你解释:
char 占用1个Byte
integer 占用4个Byte所以你呆板的考虑类型问题
例如你的代码可以这样写var
a:char;
begin
a:=char(65);
Showmessage(a);
end;你看这句
a:=char(65);
你如何解释呢?呵呵!内存就如一张打了格子的纸,我想让它4格表示一个数字时,它就是integer类型
等等!
Name: string; //姓名
Sex: Boolean; //性别
工种:Integer; //电工、焊工、司机
基本工资:Integer;
case integer of //工种不同工资项目等信息不同。
1:(电工津贴:integer)
2:(焊工津贴:integer;焊工补助:integer);
3:(车公里数:integer;每月出车次数:byte;车公里补贴:integer);
end;以上例子不一定恰当,你能理解就好!
因为工种一但确定,该工人所应有的信息就确定,就使用了下面那段变体记录。
否则的话,你还要声明所有的值,大大浪费了存储空间。
其他的你再自己去理解吧,看看书,看看别人的代码。应该收获更大。