在大多數(shù)編程語言,指針變量存儲一個對象的存儲器地址。然而,在Fortran中,指針是已經(jīng)不僅僅是存儲內(nèi)存地址更多的功能的數(shù)據(jù)對象。它包含有關(guān)特定對象的詳細(xì)信息,如型號,等級,程度和內(nèi)存地址。
一個指針是通過分配或指針賦值的目標(biāo)有關(guān)。
指針變量聲明的指針屬性。
下面的例子顯示指針變量的聲明:
integer, pointer :: p1 ! pointer to integer real, pointer, dimension (:) :: pra ! pointer to 1-dim real array real, pointer, dimension (:,:) :: pra2 ! pointer to 2-dim real array
指針可以指向:
該分配語句允許你為指針對象分配空間。例如:
program pointerExample implicit none integer, pointer :: p1 allocate(p1) p1 = 1 Print *, p1 p1 = p1 + 4 Print *, p1 end program pointerExample
當(dāng)上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結(jié)果:
1 5
你應(yīng)該DEALLOCATE語句清空分配的存儲空間時,不再需要它,避免閑置,無法使用的內(nèi)存空間積累。
一個目標(biāo)是另一個普通變量,以預(yù)留空間它。目標(biāo)變量必須與目標(biāo)屬性聲明。
您指針變量使用關(guān)聯(lián)運(yùn)營商的目標(biāo)變量關(guān)聯(lián)(=>)。
讓我們重寫前面的例子中,以證明概念:
program pointerExample implicit none integer, pointer :: p1 integer, target :: t1 p1=>t1 p1 = 1 Print *, p1 Print *, t1 p1 = p1 + 4 Print *, p1 Print *, t1 t1 = 8 Print *, p1 Print *, t1 end program pointerExample
當(dāng)上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結(jié)果:
1 1 5 5 8 8
一個指針可以是:
另外,在上述程序中,我們已關(guān)聯(lián)的指示器p1,與目標(biāo)T1,使用=>運(yùn)算符。相關(guān)的功能,測試指針的關(guān)聯(lián)狀態(tài)。
該廢止聲明的關(guān)聯(lián)從一個目標(biāo)的指針。
抵消不清空目標(biāo),因?yàn)榭赡艽嬖谝粋€以上的指針指向同一目標(biāo)。然而,排空指針意味著無效也。
例1
下面的示例演示的概念:
program pointerExample implicit none integer, pointer :: p1 integer, target :: t1 integer, target :: t2 p1=>t1 p1 = 1 Print *, p1 Print *, t1 p1 = p1 + 4 Print *, p1 Print *, t1 t1 = 8 Print *, p1 Print *, t1 nullify(p1) Print *, t1 p1=>t2 Print *, associated(p1) Print*, associated(p1, t1) Print*, associated(p1, t2) !what is the value of p1 at present Print *, p1 Print *, t2 p1 = 10 Print *, p1 Print *, t2 end program pointerExample
當(dāng)上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結(jié)果:
1 1 5 5 8 8 8 T F T 952754640 952754640 10 10
請注意,每次運(yùn)行代碼時,內(nèi)存地址會有所不同。
例2
program pointerExample implicit none integer, pointer :: a, b integer, target :: t integer :: n t= 1 a=>t t = 2 b => t n = a + b Print *, a, b, t, n end program pointerExample
當(dāng)上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結(jié)果:
2 2 2 4
更多建議: