H hurrah_d Unregistered / Unconfirmed GUEST, unregistred user! 2000-06-02 #1 请问如何象C语言那样,进行强制类型转换? 如 x=(int)1/3 用Delphi怎样表示?(不是用round函数)!
G gmwu Unregistered / Unconfirmed GUEST, unregistred user! 2000-06-02 #2 pascal是严格类型检查的。因此,她的强制类型转换 功能并不强大,并且也不提倡。 不过,DELPHI提供了许多函数用于解决此问题: 如trunc(X: Extended): Int64; round(X: Extended): Int64; Int(X: Extended): Extended; 因此,不要刻意在DELPHI中寻找C的影子!
pascal是严格类型检查的。因此,她的强制类型转换 功能并不强大,并且也不提倡。 不过,DELPHI提供了许多函数用于解决此问题: 如trunc(X: Extended): Int64; round(X: Extended): Int64; Int(X: Extended): Extended; 因此,不要刻意在DELPHI中寻找C的影子!
C CJ Unregistered / Unconfirmed GUEST, unregistred user! 2000-06-02 #4 DELPHI也有类似的转换,不过还是要经过编译器的检测 对不能转换的类型要报告错误,其它同上:)
H hurrah Unregistered / Unconfirmed GUEST, unregistred user! 2000-06-02 #6 What's the mean of 'g',popeye?
S SuperMMX Unregistered / Unconfirmed GUEST, unregistred user! 2000-06-03 #7 不用 round 用 trunc, 类型转换无非就是这样嘛。
敏 敏哥 Unregistered / Unconfirmed GUEST, unregistred user! 2000-06-04 #9 Delphi的强制类型转换比C复杂,有很多细节。分成两大类:数值转换和变量转 换。你问的问题属于数值转换,相关语法规则有: 1.整型和实型可以相互比较大小; 2.整型可以赋给实型变量,但实型不能赋给整型变量; 3.整型常值和实型常值之间不能强制转换; "/3"属于Extended实类型常值,所以integer(1/3)是语法错误。整数和实数之间 的转换可使用相关的标准过程/函数实现。
Delphi的强制类型转换比C复杂,有很多细节。分成两大类:数值转换和变量转 换。你问的问题属于数值转换,相关语法规则有: 1.整型和实型可以相互比较大小; 2.整型可以赋给实型变量,但实型不能赋给整型变量; 3.整型常值和实型常值之间不能强制转换; "/3"属于Extended实类型常值,所以integer(1/3)是语法错误。整数和实数之间 的转换可使用相关的标准过程/函数实现。
G gcq Unregistered / Unconfirmed GUEST, unregistred user! 2000-06-23 #10 在DELPHI中,有些可以象C一样强制转换的,如 var str:String; pChrChar; begin . . . pChr:=pChar(str); . . . end;
F firemeteor Unregistered / Unconfirmed GUEST, unregistred user! 2000-07-02 #12 大小相同的类型都可以相互转换。2bytes的integer和6--10bytes的real无法 直接转换
I Iknow Unregistered / Unconfirmed GUEST, unregistred user! 2000-07-03 #16 强制类型转换一般都是针对指针类型的, 比如: Pchar(string)这样的, 当然, 对记录/结构指针也是可以这么做的. 但是Delphi不提倡这么做, 一般的, 对有函数能够进行转换或能够隐式转换的, 就不要用这种方法. 而对于不能隐式转换的, 可以采用绝对变量和无类型变量的 方法, 比如: function test(var a); var ss:tform absolute a; ss1:tstringgrid absolute a; ss2:string absolute a; 这样都是可以的, 另外也可以用: var s:string; p:array [0..100] of byte absolute s; 对于指针类和对象类的, 可以用typename(varname)的方式, 不过不一定都 能够转换.
强制类型转换一般都是针对指针类型的, 比如: Pchar(string)这样的, 当然, 对记录/结构指针也是可以这么做的. 但是Delphi不提倡这么做, 一般的, 对有函数能够进行转换或能够隐式转换的, 就不要用这种方法. 而对于不能隐式转换的, 可以采用绝对变量和无类型变量的 方法, 比如: function test(var a); var ss:tform absolute a; ss1:tstringgrid absolute a; ss2:string absolute a; 这样都是可以的, 另外也可以用: var s:string; p:array [0..100] of byte absolute s; 对于指针类和对象类的, 可以用typename(varname)的方式, 不过不一定都 能够转换.
房 房客 Unregistered / Unconfirmed GUEST, unregistred user! 2000-07-03 #18 procedure cao(aObject:TObject); 则可: (cao as TEdit).text:="Hello!"; 或: if (cao is TEdit) then TEdit(cao).Text:="Hello!";
procedure cao(aObject:TObject); 则可: (cao as TEdit).text:="Hello!"; 或: if (cao is TEdit) then TEdit(cao).Text:="Hello!";