先看一段代码:
const
t1=5;{无类型常量}
t2:integer=5;{有类型常量}
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('t1所占内存大小为:'+inttostr(sizeof(t1))+' 字节 ');
showmessage('t1数据类型的最大值:'+inttostr(High(t1))+#13#10+'t1数据类型的最小值:'+inttostr(low(t1)));
end;procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage('t2所占内存大小为:'+inttostr(sizeof(t2))+' 字节 ');
showmessage('t2数据类型的最大值:'+inttostr(High(t2))+#13#10+'t2数据类型的最小值:'+inttostr(low(t2)));
end;我在Delphi7中经过测试,以上代码测试后t1大小为1字节,最大值为127,最小值为0,而ShortInt类型的范围为-128~127,那t1是否为ShortInt类型呢?如果不是那是什么类型的常量
const
t1=5;{无类型常量}
t2:integer=5;{有类型常量}
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('t1所占内存大小为:'+inttostr(sizeof(t1))+' 字节 ');
showmessage('t1数据类型的最大值:'+inttostr(High(t1))+#13#10+'t1数据类型的最小值:'+inttostr(low(t1)));
end;procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage('t2所占内存大小为:'+inttostr(sizeof(t2))+' 字节 ');
showmessage('t2数据类型的最大值:'+inttostr(High(t2))+#13#10+'t2数据类型的最小值:'+inttostr(low(t2)));
end;我在Delphi7中经过测试,以上代码测试后t1大小为1字节,最大值为127,最小值为0,而ShortInt类型的范围为-128~127,那t1是否为ShortInt类型呢?如果不是那是什么类型的常量
解决方案 »
- DBLookupCombox问题
- 串口通信具体任何实现,再与自己的开发的数据采集软件如何结合??
- 急,求adoconnection动态连接到link.udl文件的方法.具体问题如下.
- 在interface中为什么要加载ToolWin,ComCtrls, Buttons, uTiler,shellapi;它们有什么作用是什么。
- 菜鸟问题:怎么用循环来判断 tdbgrid 中所有记录中某一列的值的正负?
- 请问ListView怎么实现(点击标题栏字段名时)排序?谢谢
- 关于active x的一个问题,急急急!
- 请教:忍者的英文怎么拼写?谢谢
- 两个局域网中的英特网用户要怎么样才能通信。给点思路吧,或者要看什么书也行。
- 这两天头疼恶心,大家帮我!
- 关于差异取屏的问题
- 我想用delphi讲EXCEL电子表格的数据导入access数据库里,客户当EXCEL表的记录数大于255时提示错误,无法导入,怎么解决?
这里,可以认为是ShortInt类型,也可以认为是byte类型,他们所占用的内存大小相同。
本来编译器会为常量分配一个最适合的数据类型
按目前所知应该分配byte,但这里又不是。
或许delphi还有我们所不知道的数据类型
而无类型的常量则是编译期常量,在代码中只相当于宏替换,就是用立即数替换代码中的相应位置换句话说,对有类型的常量可以取地址,而无类型的则不能通过编译(字符串常量在许多方面看起来会有点儿特殊,但实际上没什么特别的,编译器只能那么做)
而在需要用立即数定义的地方(如定义一个类型 type Tfoo=1..N),使用有类型的常量无法通过编译对于立即数来说,不存在一个基本的类型。具体匹配什么类型,由立即数使用时的某一具体情况来决定,而不存在一个通用的类型。一般来说,按照编译器的通用原则,会用最小能够容纳该立即数的类型来匹配