fortran中的指標如何使用,功能怎樣,下面的的5個例子足可以讓你明白一切!
對於單個值,用起來很簡單,但是無法體現指標的強大功能,
示例1:
program test_pointer_1
implicit none
integer,pointer::p1,p2 !定義指標
integer::s
!------------------------------------
allocate(p1,p2) !分配記憶體空間
read(*,*)p1,p2
s=p1+p2
write(*,*)'s=',s
deallocate(p1,p2) !釋放記憶體空間
!------------------------------------
end program test_pointer_1
用指標來運算元組,可以隨意引用陣列中的任意片段,是指標的強大功能之一,
請看下面的示例2:
program test_pointer_2
implicit none
integer,pointer::a(:)
integer,target::b(5)=(/1,2,3,4,5/)
!-----------------------------------------
!---引用整個陣列
a=>b ! a(1)=1;a(2)=2;a(3)=3;a(4)=4;a(5)=5
write(*,*) 'a=>b ',a
!-----------------------------------------
!---引用陣列連續的片段
a=>b(2:3) ! a(1)=2;a(2)=3
write(*,*) 'a=>b(2:3) ',a
!-----------------------------------------
!---引用陣列不連續的片段
a=>b(1:5:2) ! a(1)=1;a(2)=3;a(3)=5
write(*,*) 'a=>b(1:5:2) ',a
!-----------------------------------------
!---引用陣列的倒序(相當於將陣列左右顛倒)
a=>b(5:1:-1) ! a(1)=5;a(2)=4;a(3)=3;a(4)=2;a(5)=1
write(*,*) 'a=>b(5:1:-1) ',a
!------------------------------------
end program test_pointer_2
如果是二維陣列,想引用某行或者某列的資料,
請看示例3:
program test_pointer_3
implicit none
integer::i,j,k
real,pointer::a(:)
real,target::b(3,4)
!-----------------------------------------
!---二維陣列賦初值
!data b/1,2,3,4,5,6,7,8,9,10,11,12/
data ((b(i,j),i=1,3),j=1,4)/1,2,3,4,5,6,7,8,9,10,11,12/
!-----------------------------------------
!---列印二維陣列內容
do i=1,3
write(*,*) b(i,:)
end do
!-----------------------------------------
!---引用二維陣列第二行
a=>b(2,:)
write(*,*) 'a=>b(2,:) ',a
!-----------------------------------------
!---引用二維陣列第三列
a=>b(:,3)
write(*,*) 'a=>b(:,3) ',a
!------------------------------------
end program test_pointer_3
程式執行結果如下:
上面的指標是一維的,對於用二維指標來引用二維陣列中的二維片段也是同樣方便,
請看示例4:
program test_pointer_4
implicit none
integer::i,j,k
real,pointer::p(:,:) !二維的指標
real,target::b(3,4)
!-----------------------------------------
!---二維陣列賦初值
!data b/1,2,3,4,5,6,7,8,9,10,11,12/
data ((b(i,j),i=1,3),j=1,4)/1,2,3,4,5,6,7,8,9,10,11,12/
!-----------------------------------------
!---列印二維陣列內容
write(*,*) 'b(3,4)'
do i=1,3
write(*,*) b(i,:)
end do
!-----------------------------------------
!---引用二維陣列中的二維片段
p=>b(1:2,2:3)
write(*,*) 'p=>b(1:2,2:3)'
do i=1,2
write(*,*) p(i,:)
end do
!-----------------------------------------
p=0 !將b(1:2,2:3)中的元素置為0
!---列印二維陣列內容
write(*,*) 'b(3,4)'
do i=1,3
write(*,*) b(i,:)
end do
!------------------------------------
end program test_pointer_4
執行如下:
把指標當做動態陣列來使用,也是很方便的:
program test_pointer_5
implicit none
integer::i
real,pointer::p(:) !利用指標為陣列動態分配記憶體
!-----------------------------------------
allocate(p(5)) !---為陣列(指標)分配記憶體空間
!-----------------------------------------
!---陣列賦值
do i=1,5
p(i)=i*2
end do
!-----------------------------------------
write(*,*) 'p(5)=',p !p(5)=2,4,6,8,10
!-----------------------------------------
deallocate(p) !---為陣列(指標)釋放記憶體空間
end program test_pointer_5
上面的指標使用是最初級的,高階的用法還有實現指標鍊錶和type型別的指標陣列等
對於指標下面的語句**常常用到:
! 常用語句
! pointer_c=>null(); ! 指標指向null
! nullify(ptr_a); ! 指標指向null
! status = associated (c); ! 如果c有所指向返回true
! status = associated (c, e); ! 如果c指向e返回true,如果c和e指向的目標相同或者二者均為null返回true(二者都是指標)
高效使用FORTRAN陣列
發信人 huicai 老灰菜 信區 fortran 標 題 高效使用fortran陣列 發信站 瀚海星雲 2002年10月10日23 06 02 星期四 站內信件 高效使用fortran陣列 1 陣列整體訪問 最快的陣列操作發生在連續訪問整個陣列或大部分陣列的時候。對整個陣列或大部分陣列實施乙個或者...
Fortran中的輸入輸出!!!
我們學習計算機語言的目的在於與計算機進行互動 輸入即向計算機傳送指令,輸出即計算機對我們傳送的指令做出的響應 所以互動的前提首先要搞清程式語言的輸入輸出 輸入輸出方法有 write print read 我們需要在輸入輸出語句中提供三方面的資訊 1 通過什麼裝置進行輸入輸出 2 採用的輸入輸出格式 ...
C 中函式指標的使用
在c c 中存在著函式指標,即指向函式的指標。我目前已知的兩種使用方法是 include include typedef int pinnt define pp int int funca int a,int b int funcb int a,int b int main int argc,cha...