德尔福的指针

Vib*_*nRC 9 delphi

指针仍可用于pascal,我认为它们可能会保留它直到delphi活着.

即使我在学习帕斯卡时使用了指针.我仍然无法理解指针的实际用法,我设法在没有它的情况下完成所有的delphi程序.(通过其他方式)

指针的真正用途是什么.而且我要求真实世界使用,我们可以设法做任何事情而无需指针.

Ken*_*ite 13

你使用指针的次数比你在Delphi中的指针要频繁得多.编译器只是隐藏它.

var
  SL: TStringList; 
...
  SL := TStringList.Create;
  // SL is now a pointer to an instance of the TStringList class.
  // You don't know it because the compiler handles dereferencing
  // it, so you don't have to use SL^ . You can just use the var.
  SL.Add('This is a string');
Run Code Online (Sandbox Code Playgroud)

字符串也是指向存储字符串的内存块的指针.(它实际上存储的不止于此,但......)

所以记录的实例,PChars(基本上是指向字符数组的指针),以及你每天使用的大量其他东西.有许多指针不称为指针.:)

  • 有些语言没有明确使用指针.我在想Java和C#(不使用不安全). (3认同)

RRU*_*RUZ 11

指针包含内存位置的地址,因为它存在于任何地方.您声明的每个变量,甚至您编写的代码都可以使用指针访问,指针是Win32编程中最基本的元素之一,您必须阅读Rudy Velthuis的这篇精彩文章Addressing pointers才能理解指针用法.

  • +1链接到Rudy的文章.这个问题的作者很好读. (3认同)

Cos*_*und 5

要理解现代Delphi中可能使用的指针,需要了解指针在历史上的使用方式以及Delphi如何在幕后使用指针.

指针代码

可以有指向一段代码的指针.这可以用于直观的事情(使用它需要调用的函数来参数化一些算法;示例:TObjectList.Sort将函数指针作为参数).现代Delphi使用指针代码来实现以下内容(不再详述):

  • 虚方法表; 没有VMT,我们不能有OOP
  • 接口
  • 事件和匿名方法.

这些都是避免原始指针代码的非常强大的方法,实际上今天对原始代码指针的需求非常少.

指向数据的指针

每个人都使用链接列表学习指针.指针对于实现大多数非平凡的数据结构至关重要; 事实上,很难命名一个没有使用指针实现的有用数据结构.

Delphi为数据指针提供了大量的格栅抽象,因此我们可以在不触及指针的情况下工作.我们有对象(类实例)和大多数数据结构(stringTObjectList,动态数组)的良好实现.

我们什么时候使用指针?

我们基本上使用指针来实现Delphi为我们提供的更多炉排.我可以举例说明我使用过指针的例子,但我发现举例说明其他人使用指针的例子: