Delphi 中的 Var buffer 开类型参数

来源:互联网 发布:四川广电网络考试试题 编辑:程序博客网 时间:2024/05/16 07:15

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

象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个字节
这样明白?

 

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

原创粉丝点击