强制类型转换?(50分)

  • 主题发起人 主题发起人 hurrah_d
  • 开始时间 开始时间
H

hurrah_d

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何象C语言那样,进行强制类型转换?
如 x=(int)1/3
用Delphi怎样表示?(不是用round函数)!
 
pascal是严格类型检查的。因此,她的强制类型转换
功能并不强大,并且也不提倡。
不过,DELPHI提供了许多函数用于解决此问题:
如trunc(X: Extended): Int64;
round(X: Extended): Int64;
Int(X: Extended): Extended;

因此,不要刻意在DELPHI中寻找C的影子!
 
通常采用X:1 div 3;
其他方法不会,愿意听
 
DELPHI也有类似的转换,不过还是要经过编译器的检测
对不能转换的类型要报告错误,其它同上:)
 
What's the mean of 'g',popeye?
 
不用 round 用 trunc, 类型转换无非就是这样嘛。
 
g=跟=听=关注=@_@=.....
 
Delphi的强制类型转换比C复杂,有很多细节。分成两大类:数值转换和变量转
换。你问的问题属于数值转换,相关语法规则有:
1.整型和实型可以相互比较大小;
2.整型可以赋给实型变量,但实型不能赋给整型变量;
3.整型常值和实型常值之间不能强制转换;
"/3"属于Extended实类型常值,所以integer(1/3)是语法错误。整数和实数之间
的转换可使用相关的标准过程/函数实现。
 
在DELPHI中,有些可以象C一样强制转换的,如
var str:String;
pChr:pChar;
begin
.
.
.
pChr:=pChar(str);
.
.
.
end;
 
只是对一些很特殊的可以。
 
大小相同的类型都可以相互转换。2bytes的integer和6--10bytes的real无法
直接转换
 
自己写一个过程进行处理不就得了(就是麻烦了点)?
 
g


关注
@_@
.....
 
强制类型转换一般都是针对指针类型的, 比如:
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)的方式, 不过不一定都
能够转换.
 
多人接受答案了。
 
procedure cao(aObject:TObject);
则可:
(cao as TEdit).text:="Hello!";
或:
if (cao is TEdit) then
TEdit(cao).Text:="Hello!";
 
后退
顶部