Delphi 中的 Var buffer 开类型参数
以下是在網(wǎng)上收集的一些對無類型參數(shù)的說明.個人理解無類型變量就是一個指針.
象Delphi中function ? Read(var ? Buffer; ? Count: ? Longint): ? Longint; ? override;象Buffer這樣沒有類型的參數(shù)究竟應該怎么給參數(shù)???? ?
? 這說明Buffer是通過地址方式傳遞的,一般說來只要是一段內(nèi)存區(qū)域就行。??
?
?
?
?
var ? Buffer; ? const ? buffer; ?
? 這些沒類型說明的形參說明是取地址的首地址。 ?
? 類型 ? ? ? ? ? ? ? 首地址 ?
? string ? ? ? ? ? string[1] ?
? char ? ? ? ? ? ? ? 自己 ?
? integer ? ? ? ? 自己 ?
? record ? ? ? ? ? 自己 ?
? array ? ? ? ? ? ? arr[0] ?
? pchar ? ? ? ? ? ? pchar()^ ?
? pointer ? ? ? ? pointer()^ ?
? otherPointer ? ? ? ? ? otherPointer()^ ? ? PInteger()^之類的 ?
? ?
? 一般用首地址的方法或函數(shù)除了首地址外,都有一人count的參數(shù),一般我們用 ?
? length(string), ? sizeof(record), ? sizeof(type) ? * ? lengh ?
? ?
? 如果你在寫reocord中有string,請為它分配內(nèi)存: ? string[len], ? or ? str: ? array[0..len] ? of ? char
?
?
?
?
?
?
??????????????? Buffer1:Array ? of ? char; ? ?
? ? ? ? ? ? ? ? Buffer2:Array ? [0..2048] ? of ? char; ?
? Buffer1 ? 和 ? Buffer2 ? 在使用上是沒有區(qū)別的,如: ?
? 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表示變參,即在函數(shù)中可以改變其值并且返回到調(diào)用過程中
var buf就是不指定類型的變參,不管你傳入什么類型,函數(shù)中一律將其作為字節(jié)來對待,
比如傳入DWORD,就是4個字節(jié),函數(shù)中不知道是DWORD,所以必須用bufsize告訴它是4個字節(jié)
這樣明白?
?
相當于讓你優(yōu)雅的傳遞一個數(shù)據(jù)指針,基本上接受這類參數(shù)的行為大部分就是內(nèi)存處理,無需理會或在意傳進來的數(shù)據(jù)格式,或者參數(shù)的格式預先就知道,只是為了方便。
總結
以上是生活随笔為你收集整理的Delphi 中的 Var buffer 开类型参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++——《算法分析》实验伍——箱子装载
- 下一篇: push ebp