请问在delphi中使用指针有什么好处?(60)

  • 主题发起人 tom12345
  • 开始时间
D

dark_power

Unregistered / Unconfirmed
GUEST, unregistred user!
mmo1是一个TMemo控件。当你去掉ShowMessage和mmo1这两句上的注释符时,系统IO和窗口刷新会用掉很多时间,一定范围内会让两者的差距缩小。
 
T

tom12345

Unregistered / Unconfirmed
GUEST, unregistred user!
dark_power, 有个问题, Method 2 编译正确,运行出错,显示信息: Format '%1' invalid or incompatible with argument.在语句 sWatch:= Copy(ps, npos, Length(ps))
后加语句 ShowMessage(sWatch);可正确运行,什么原因?
 
D

dark_power

Unregistered / Unconfirmed
GUEST, unregistred user!
信息说的是无效的或不兼容的格式化参数。我不知道你是否修改了什么或加入了什么,单纯从语句来看是没有问题的啊。
 
T

tom12345

Unregistered / Unconfirmed
GUEST, unregistred user!
只是把 for t := 1 to 100000 do 改为 for t := 1 to 1 do for t := 1 to 1 do begin npos:= 1
while (npos< Length(ps)-4) do begin npos:= PosEx('-', ps, npos)
Inc(npos)
sWatch:= Copy(ps, npos, Length(ps))
// ShowMessage(sWatch)
// mmo1.Lines.Add(sWatch)
end
end
其它的没修改什么或加入什么东西啊,现在运行又显示以下错误: 不是有效的 Win32 应用程序。
 
D

dark_power

Unregistered / Unconfirmed
GUEST, unregistred user!
for t:= 1 to 1 do导致其中代码根本就不会执行。
 
T

tom12345

Unregistered / Unconfirmed
GUEST, unregistred user!
改为 for t := 1 to 100000 do 还是一样啊
 
D

dark_power

Unregistered / Unconfirmed
GUEST, unregistred user!
程序在我这里是正常运行的。我不清楚你的程序编码是怎样的。其实,指针的使用是非常多的而且通常在使用的场景中是高效的。简单的,带var前缀的参数就是指针类型的,他实际传递的是一个地址。想一想,如果你传递的参数是很大数组或一个很大的文本或内存块,普通的参数传递时值传递,也就是在栈上开辟一块和实参大小相同的区域来复制实参内容,然后,函数执行完毕还要把这些内容在复制到实参中,这整个过程都需要进行大量IO操作,比起传地址直接操作其中数据当然要慢。只是现在的机器都非常快,单次或小批次重复感觉不到指针的优势。现在的语言也尽量封装和隐藏指针,直接使用的指针的场景和范围也越来越少。至于使用指针能提高多少效率,看要看问题性质和数据处理规模。指针的另一个好处是方便,比如你知道内存中哪个地址存放的是游戏中的数据,比如攻击力,你就可以将指针指向他,然后修改其中的数据。不然,我还真没细想你还能用什么办法不用指针的形式来修改未标记的特定内存区域。
 
T

tom12345

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢各位大侠,dark_power,再给你加100分如何?
 
顶部