設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

tag 標(biāo)簽: Freebasic的指針函數(shù)

相關(guān)帖子

版塊 作者 回復(fù)/查看 最后發(fā)表

沒有相關(guān)內(nèi)容

相關(guān)日志

分享 FreeBasic中的指針基礎(chǔ)入門四----指針函數(shù)與函數(shù)指針——冬瓜湯整理
ganlinlao 2014-10-2 18:13
8 、指針函數(shù) 指針函數(shù)是指返回值是指針的函數(shù),即本質(zhì)是一個函數(shù)。 當(dāng)一個函數(shù)聲明其返回值為一個指針時,實際上就是返回一個地址給調(diào)用函數(shù)以用于需要指針或地址的表達式中。 格式: Dim 函數(shù)名(參數(shù)) as 類型說明符 ptr 當(dāng)然了,由于返回的是一個地址,所以類型說明符一般是 integer. ( 在 FB 中 integer 在 32 位中等價于 long, 在 64 位中等價于 longint 。而 long 不管是 32 位或 64 位都是固定 32 位。所以我個人常用 integer 來表示指針。這個 Integer 跟 VBA 中的 integer 數(shù)值大小范圍是完全不一樣的,切記 ) 如: Dim GetDate() as integer ptr Dim AAA(a as string,b as long) as integer ptr 函數(shù)返回的是一個地址值,經(jīng)常使用在返回數(shù)組的某一元素地址上。 9 、函數(shù)指針 FreeBasic 在編譯時,每一個函數(shù)都有一個入口地址,該入口地址就是函數(shù)指針?biāo)赶虻牡刂。有了指向函?shù)的指針變量后,可用該指針變量調(diào)用函數(shù),就如同用指針變量可引用其他類型變量一樣,在這些概念上是一致的。 函數(shù)指針有兩個用途:調(diào)用函數(shù)和做函數(shù)的參數(shù) 。 指向函數(shù)的指針包含了函數(shù)的地址,可以通過它來調(diào)用函數(shù)。 聲明格式如下: 聲明符 函數(shù)指針變量名 As function ( 參數(shù)) 函數(shù)指針的聲明和它指向函數(shù)的聲明應(yīng)保持一致。 如: 聲明一個無參數(shù)的 sub 過程的函數(shù)指針 Dim Ptrsub as sub 聲明一個帶參數(shù)的 function 的函數(shù)指針 如: Function Add(a as integer,b as integer) as integer Return a+b End function Dim PtrAdd as Function(as integer,as integer) as integer=@add 把函數(shù)的地址賦值給函數(shù)指針,可以采用下面兩種形式: Fptr=@Function Fptr=Procptr(Function) 注意, 指向函數(shù)的指針變量沒有 ++ 和 -- 運算,用時要小心。 賦給函數(shù)指針的函數(shù)應(yīng)該和函數(shù)指針?biāo)傅暮瘮?shù)原型是一致的 如何調(diào)用函數(shù)指針? 如: Function Add(a as integer,b as integer) as integer Return a+b End function Dim PtrAdd as Function(as integer,as integer) as integer=@add Print “3+4 =” ptrAdd(3,4) /’ 直接把參數(shù)傳給函數(shù)指針'/ 函數(shù)指針如何做為函數(shù)或過程的參數(shù)? 接上面的例子: Function mynewfunction(a as integer,b as integer,ptrAdd as function(as integer,as integer) as integer) as integer Return ptrAdd(a,b) End function ‘ 聲明一個帶函數(shù)指針參數(shù)的函數(shù) Print “3+4=” mynewfunction(3,4,@add) 另一種寫法:把函數(shù)指針用type定義成一個結(jié)構(gòu)類型 Type PtrAdd as Function(as integer,as integer) as integer Function mynewfunction(a as integer,b as integer,myPtradd as ptrAdd) as integer Print “3+4=” mynewfunction(3,4,@add) 10 、指針的指針 指針的指針看上去有些令人費解。它們的聲明有兩個 ptr 。例如: Dim ptrMystring as string ptr ptr 如果有三個 ptr ,那就是指針的指針的指針,四個 ptr 就是指針的指針的指針的指針,依次類推。當(dāng)你熟悉了簡單的例子以后,就可以應(yīng)付復(fù)雜的情況了。當(dāng)然,實際程序中,一般也只用到二級指針,三級指針不常見,更別說四級指針了。 指針的指針需要用到指針的地址。 Dim c as string=”hello,world” Dim P as string ptr =@c Dim cp as string ptr ptr=@P 通過指針的指針,不僅可以訪問它指向的指針,還可以訪問它指向的指針?biāo)赶虻臄?shù)據(jù)。下面就是幾個這樣的例子: Dim ptrP as string ptr=*cp ‘ 把 P 的地址賦值給 ptrP Print **cp ‘ 打印 c 的內(nèi)容即 ”hello,world” 說明: 指針取值 * 運算是從右到左的順序 你可能想知道這樣的結(jié)構(gòu)有什么用。利用指針的指針可以允許被調(diào)用函數(shù)修改局部指針變量和處理指針數(shù)組。 11 、指向指針數(shù)組的指針。(這個用處不多,在此略過) 12 、函數(shù)指針數(shù)組 函數(shù)指針數(shù)組就是函數(shù)指針的數(shù)組,函數(shù)指針數(shù)組是一個其元素是函數(shù)指針的數(shù)組。那么也就是說,此數(shù)據(jù)結(jié)構(gòu)是一個數(shù)組,且其元素是一個指向函數(shù)入口地址的指針。 使用方法類似與普通的數(shù)組 。 Freebasic 中,無法直接聲明一個函數(shù)指針的指針變量。應(yīng)該用 type 先把函數(shù)指針定義成一個結(jié)構(gòu)類型。然后再聲明函數(shù)指針的指針變量。 例子: Function Halve (ByVal i As Integer) As Integer ‘ 一個普通的函數(shù) Return i / 2 End Function Function Triple (ByVal i As Integer) As Integer Return i * 3 End Function Type operation As Function (ByVal As Integer) As Integer /‘ 用 type 先把函數(shù)指針定義成一個結(jié)構(gòu)類型 接下來定義一個函數(shù)指針數(shù)組,用 Null 作為數(shù)組的結(jié)尾符 ’/ Dim operations(20) As operation = _ { @Halve, @Triple, 0 } Dim i As Integer = 280 Dim op As operation Ptr = @operations(0) ‘ 定義一個指針變量指向函數(shù)指針數(shù)組首地址 While (*op 0) i = (*op)(i) ‘ 必須用括號把 *op 括起來,因為 * 取值的運算順序低于函數(shù)的 () op += 1 Wend Print "Value of 'i' after all operations performed: " i
個人分類: FreeBasic|3249 次閱讀|0 個評論

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-13 07:46 , Processed in 0.090599 second(s), 13 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部