Delphi 中的 Var buffer 开类型参数

  • Post author:
  • Post category:其他


以下是在网上收集的一些对无类型参数的说明.个人理解无类型变量就是一个指针.

象Delphi中function   Read(var   Buffer;   Count:   Longint):   Longint;   override;象Buffer这样没有类型的参数究竟应该怎么给参数????

这说明Buffer是通过地址方式传递的,一般说来只要是一段内存区域就行。

var   Buffer;   const   buffer;

这些没类型说明的形参说明是取地址的首地址。

类型               首地址

string           string[1]

char               自己

integer         自己

record           自己

array             arr[0]

pchar             pchar()^

pointer         pointer()^

otherPointer           otherPointer()^     PInteger()^之类的

一般用首地址的方法或函数除了首地址外,都有一人count的参数,一般我们用

length(string),   sizeof(record),   sizeof(type)   *   lengh

如果你在写reocord中有string,请为它分配内存:   string[len],   or   str:   array[0..len]   of   char

Buffer1:Array   of   char;

Buffer2:Array   [0..2048]   of   char;

Buffer1   和   Buffer2   在使用上是没有区别的,如:

Buffer1[10]   和   Buffer2[10]等价—-char   类型

Buffer1   和   Buffer2等价     ———-pointer   类型

所以:

Var   Buffer:Array   of   char;



FileStream.Read(Pointer(Buffer),FILEStream.Size);

….

应该改为:

FileStream.Read(Buffer,FILEStream.Size);

同理

Var     Buffer:String;



FileStream.Read(Pointer(Buffer),FILEStream.Size);



应该改为:

FileStream.Read(Buffer,FILEStream.Size);

var表示变参,即在函数中可以改变其值并且返回到调用过程中

var buf就是不指定类型的变参,不管你传入什么类型,函数中一律将其作为字节来对待,

比如传入DWORD,就是4个字节,函数中不知道是DWORD,所以必须用bufsize告诉它是4个字节

这样明白?

相当于让你优雅的传递一个数据指针,基本上接受这类参数的行为大部分就是内存处理,无需理会或在意传进来的数据格式,或者参数的格式预先就知道,只是为了方便。



版权声明:本文为diligentcat原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。