关于函数参数 的 一个 疑问????????? cmd:string;MyStream:Tmemorystream;调用 MyStream.Write(Cmd[1],Length(Cmd));时为什么 不直接用 cmd 做参数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 string[0]是表示长度,所以要从1开始。 也可以得这样用: MyStream.Write(pinteger(integer(cmd))^,length(cmd)); Cmd[1] 是第一个字符的开头位置,pinteger(integer(cmd))^也是整个字符串的开头位置,楼上两位说的都是这个意思 Cmd是字符串,要访问Pchar就要用Cmd[1] 因为 @String <> @String[1]因为长字符串 String 变量实际是一个指针变量,它指向堆内存中的字符序列开始的位置(即String[1])。 string是一种特殊的类型我一般的理解就是把它看成是一个类似"对象"的东西.这种"对象"所占的空间里面,除了实际保存字符串的那些字节空间外,可能还有其他东西.实际保存字节的位置,不一定在这个"对象"开始的位置. 呵呵,不知道这样理解对不对. 下面是进一步分析:type TMyRecord1 = packed record a: Integer; b: string; end; TMyRecord2 = packed record a: Integer; b: array[0..255] of Char; end;这两个结构肯定是不一样的,从长度就可以看出来,SizeOf(TMyRecord1) ----8个Byte. integer占4个byte,string占4个SizeOf(TMyRecord2). ----260个Byte. integer占4个byte,array占256个.对于TMyRecord2,内存是连续的,前4个字节,保存整型值.接着就是256个byte大小,保存实际的字符内容.但是TMyRecord1,里面的b这个结构成员,只是在里面记录一个地址.这个地址,是否就是b[1]的地址? 5楼的大哥说了,不是.那根据这个地址,怎么找到b[1]的地址?我也不知道.....呵呵.反正编译器知道怎么去找. 哪位老大知道,还望赐教!回到你的问题,MyStream.Write 这个方法,是将从第一个参数的地址那里开始,一直到第二个参数那么长的内存空间 的内容,写到流里面.如果传入string参数,很显然,正如上面的分析,这个地址,不是string[1]的地址.... 关于如果获得showmessage的句柄 关于线程结束 Delphi有支持ipv6的socket控件吗?谁知道啊 TADOCommand执行存储过程中遇到的问题! stringgrid如何实现有下拉列表的功能? Label1.caption的显示问题》 后门程序的监视屏幕功能是怎样实现的?是连续抓图吗?? Oracle调用Oracle存储过程? 请教各位高手,用delphi 作套打 有没有好的控件 ? access下的时间查询,帮忙。 用DELPHI编,实现查询EXCEL表在数据库中的表是否存在,不存在则插入数据库表中,请DELPHI高手帮个忙 在cxGrid中使用进度条的问题
我一般的理解就是把它看成是一个类似"对象"的东西.这种"对象"所占的空间里面,除了实际保存字符串的那些字节空间外,可能还有其他东西.
实际保存字节的位置,不一定在这个"对象"开始的位置. 呵呵,不知道这样理解对不对. 下面是进一步分析:type
TMyRecord1 = packed record
a: Integer;
b: string;
end; TMyRecord2 = packed record
a: Integer;
b: array[0..255] of Char;
end;这两个结构肯定是不一样的,从长度就可以看出来,
SizeOf(TMyRecord1) ----8个Byte. integer占4个byte,string占4个
SizeOf(TMyRecord2). ----260个Byte. integer占4个byte,array占256个.对于TMyRecord2,内存是连续的,前4个字节,保存整型值.接着就是256个byte大小,保存实际的字符内容.
但是TMyRecord1,里面的b这个结构成员,只是在里面记录一个地址.这个地址,是否就是b[1]的地址? 5楼的大哥说了,不是.那根据这个地址,怎么找到b[1]的地址?我也不知道.....呵呵.反正编译器知道怎么去找. 哪位老大知道,还望赐教!
回到你的问题,
MyStream.Write 这个方法,是将从第一个参数的地址那里开始,一直到第二个参数那么长的内存空间 的内容,写到流里面.
如果传入string参数,很显然,正如上面的分析,这个地址,不是string[1]的地址....