char far * 是什么,是c里的么?
解决方案 »
- 求助:关于OnKeyDown事件
- 如何判断查找的数据内容是否存在某一数据中
- DBExpress和DBGrid不能同时使用?
- 這個問題是不是好難
- 急啊!在DELPHI7.0里默认没有安装打印报表的控件Qreport,要怎么样才能让它安装上去啊!!
- 请问怎么禁止屏保的运行
- 100分求救:如何在Form上放置一个操作Excel的OLE容器,还要去掉Excel的工具栏?
- 大虾帮忙
- 刚学delphi,第一回发言。想要一段修改文件后缀的程序,请大家帮忙。
- 连接远程数据库后,为什么我添加了一条记录后,tdbgrid为什么不刷新?
- TLabel 的 OnMouseEnter 和 OnMoveLeave 分别对应 什么消息!!谢谢
- 一个菜鸟级的问题,但要有VCL顶级的功夫,谁能应战。欢迎讨论!!!
但char far *我也没见过!不知有何区别!如何使用?
恭听教诲!
char 是字节
一维数组是string
Pascal里根本就没有char far *
far在Delphi里根本就是16bit的遗留物
pchar应该算TP/BP/OP中的一个特殊处理的类型。
pchar 是不存在结束符的字符串
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~不对吧,正好相反,它是指向null结尾字符串的指针
char 是字节
一维数组是string
pchar是指向null结束的char字符串的指针。类似于c的 char * 或lpstr
一维数组是字符串。但是第一个x[0]中是字符串的长度。并且最后以0作为结束标志!
如果Delphi中有char far *可能意思差不多,但是我认为没有,Delphi中指针不是使用^符号吗
type StringType:array[0..255] of char;
但是,虽然你可以把一个字符串看待,但它仍然保持其数组的特性。例如在定义一个字符串类型变量时,你可以说明字符串的大小,就像你定义字符数组的大小一样。下面是几个字符串类型定义:
type MyString:string[15];
BigString:string;
LittleString:string[1];
上面语句定义MyString类型包含15个字符,LittleString包含1个字符,BigString没有说明大小,就取字符串包含字符的最大个数255。然后你可以定义这些类型的变量,就像使用其它类型一样:
Var MyName:MyString;
Letter,Digit:LittleString;
你可以对字符串变量进行赋值:
MyName:='Frank.P.Land';
因为MyName长度为15,因此只能容纳15个字符。如果执行下面语句:
MyName:='Frank.P.Borland'
则MyName变量中只存有FranK.P.Borlan
为了取得字符串中的一个字符,可以按如下方法进行:
AChar:=MyName[2];
但是,如果索引大于字符串变量的长度,则结果不可知。
例如: AChar:=MyName[16];
则AChar将被设置为某个不确定的字符,换句话说,就是废字符。在字符串类型的数组中,字符串的第一个位置[0]包含有字符串的长度,因此数组的实际长度比该字符串长度大1个字节。你可以使用Length函数或下面的代码来得到一个字符串的长度:
L:=Ord(String[0]);
n u l l结束的字符串相兼容。
• ShortString 保留该类型是为了向后兼容Delphi 1.0,它的长度限制在2 5 5个字符内。
• WideString 功能上类似于A n s i S t r i n g,但它是由Wi d e C h a r字符组成的。
• PChar 指向n u l l结束的C h a r字符串的指针,类似于C的char * 或l p s t r类型。
• PAnsiChar 指向n u l l结束的A n s i C h a r字符串的指针。
• PWideChar 指向n u l l结束的Wi d e C h a r字符串的指针。
缺省情况下,如果用如下的代码来定义字符串,编译器认为是AnsiString 字符串:
v a r
S:string; //编译器认为S的类型是A n s i S t r i n g
当然,能用编译开关$ H来将s t r i n g类型定义为S h o r t S t r i n g,当$ H编译开关的值为负时, s t r i n g变量
是S h o r t S t r i n g类型;当$ H编译开关的值为正时(缺省情况),字符串变量是A n s i S t r i n g类型。下面的代码
演示了这种情况:
v a r
{ $ H - }
S1:string; //S1是S h o r t S t r i n g类型
{ $ H + }
S2:string; //S2是A n s i S t r i n g类型
使用$ H规则的一个例外是,如果在定义时特地指定了长度(最大在2 5 5个字符内),那么总是
S h o r t S t r i n g:
v a r
S: string[63]; //63个字符的S h o r t S t r i n g字符串
string一位数组应该是通用的 他就是windows的标准字符,有一个结束符,呵呵他的长度你说是多少呢
所以你在使用api时你会看到Pchar 打Messagebox 看看,呵呵如果你用一个字符变量放在第2个位子那里你看看系统会报错,这就是原因了,所以你要用pchar 行的
var
dd:string;
messagebox(form1.handle,dd,'asf',mb_ok); //报错
messagebox(form1.handle,'asdf','asf',Mb_ok) //通过
messagebox(form1.handle,pchar(dd),'asf',Mb_oK);//你说结果怎么样呢
那么我们所以猜测delphi里变量类型名可以干什么拉巴,我也是自己猜得,所错啦不要笑我,告诉我,就是可以强制转化类型那个什么 char far * 我还不知道
good luck