- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Chapter 指標 P-0 指標基本概念 指標是一種間接使用資料的方法,指標變數是用 來儲存記憶體位址 指標運作步驟:取出指標中所儲存的記憶體位置,到這個記憶體位置讀寫資料。 記憶體來源有兩種:1). 記錄其他非指標變數的記憶體位置2). 程式執行中動態配置一塊記憶體 P-1 使用指標 記錄其他非指標變數的記憶體位置 將指標指向已宣告的記憶體,則可以利用指標來間接地 使用記憶體 程式說明 integer, pointer :: p integer, target :: a p = a P-1 使用指標 P-1 使用指標 程式執行中動態配置一塊記憶體 將指標指向未知的記憶體,可以在程式執行中動態配置 或釋放,但無法直接使用記憶體變數,必須藉由指標來 使用記憶體 程式說明 allocate(p) deallocate(p) P-1 使用指標 P-2 指標相關函式 associated ( pointer, target )檢查指標pointer是否有設定指向目標變數target,傳回值為邏輯值。若省略目標變數target,則只檢查這個指標是否已經指定好方向 null ( )Fortran 95 新增的函數。會傳回一個不能使用的記憶體位址,在指標還沒有指向前設定成這個值,可以讓 assocaited 函式判斷不會出錯 nullify ( pointer1, pointer2, … ) 用來把指標設定成還沒有指向任何記憶體位址。Fortran 90只能使用nullify而不能使用null函數來設定指標 P-3 指標陣列 指標陣列使用方法一 把指標指向已宣告的陣列,配置記憶體空間來使用 程式說明 integer, pointer :: a (:) integer, target :: b(5)=(/ 1,2,3,4,5 /) a = b P-3 指標陣列 P-3 指標陣列 指標陣列使用方法二 把指標指向未知的記憶體,在程式執行中動態配置或釋放 程式說明 allocate(a(5)) deallocate(a) P-3 指標陣列 P-4 指標與函式 指標變數可以當成參數在 subroutine 之間傳遞, 也可以當成 function 的傳回值。 使用原則:1). 要把指標傳遞給 subroutine 時,要宣告這個 subroutine 的參數使用介面 interface。2). 指標參數宣告時不需 intent 這個形容詞。3). Function 傳回值若為指標時,需要定義 function 的 interface。 P-3 指標陣列 P-3 指標陣列 P-3 指標陣列 P-3 指標陣列 * 宣告p為一個指標,其指標所指向的記憶體的資料型態為整數 宣告a為一個可以當成目標的變數 將指標p指到變數a Ex. 完整程式 program ex1001 implicit none integer, pointer :: p integer, target :: a=1 p=a write(*,*) p a=2 write(*,*) p p=3 write(*,*) a end program ex1001 1 內容 p a 變數 002 001 記憶體位置 001 2 3 把指標p指到變數a 改變a的值 改變指標p指向的記憶體內容 Ex. 執行結果 1 2 3 指標的宣告 配置一塊記憶體空間給指標p。注意使用指標之前,一定要先設定好指標的目標,否則會出現記憶體使用錯誤的訊息,如 segmentation fault 經由allocate得到的記憶體空間,需用deallocate釋放回去,否則此記憶體空間一直被佔用,無法使用,直到整個程式結束為止 Ex. 完整程式 program ex1002 implicit none integer, target :: a=1, b=2 integer, pointer :: p allocate(p) p=100 write(*,*) p deallocate(p) p = a end program ??? p 003 2 1 內容 b a 變數 002 001 記憶體位置 ??? 100 把指標p指到變數a 釋放記憶體 Ex. 執行結果 100 得到記憶體後指標p可以像一般整數一樣來使用 配置一塊可以存放integer的記憶體空間給指標p 001 Ex. integer, pointer :: p = null( ) Ex. integer, pointe
原创力文档


文档评论(0)