指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第1頁(yè)
指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第2頁(yè)
指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第3頁(yè)
指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第4頁(yè)
指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心 第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)FORTRAN90FORTRAN90程序設(shè)計(jì)程序設(shè)計(jì)課多媒體課件課多媒體課件03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.1 11.1 概述概述/ /概述概述l靜態(tài)數(shù)據(jù)結(jié)構(gòu)靜態(tài)數(shù)據(jù)結(jié)構(gòu): :在編譯時(shí)為其分配存儲(chǔ)空間在編譯時(shí)為其分配存儲(chǔ)空間, ,大小不能改變。大小不能改變。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :分配算法簡(jiǎn)單分配算法簡(jiǎn)單, ,易于實(shí)現(xiàn)易于實(shí)現(xiàn), ,使用方便。使用方便。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :易浪費(fèi)存儲(chǔ)空間易浪費(fèi)存儲(chǔ)空間

2、, ,易產(chǎn)生下標(biāo)越界錯(cuò)誤。易產(chǎn)生下標(biāo)越界錯(cuò)誤。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu): :在運(yùn)行時(shí)為其分配存儲(chǔ)空間在運(yùn)行時(shí)為其分配存儲(chǔ)空間, ,大小可改變。大小可改變。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :可節(jié)約存儲(chǔ)空間,靈活,應(yīng)用廣??晒?jié)約存儲(chǔ)空間,靈活,應(yīng)用廣。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :分配算法復(fù)雜分配算法復(fù)雜, ,實(shí)現(xiàn)難度大。實(shí)現(xiàn)難度大。 象象鏈表鏈表、樹結(jié)構(gòu)樹結(jié)構(gòu)、圖結(jié)構(gòu)圖結(jié)構(gòu)等數(shù)據(jù)結(jié)構(gòu)都適合用動(dòng)態(tài)數(shù)據(jù)等數(shù)據(jù)結(jié)構(gòu)都適合用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。 指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)

3、廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和靈活應(yīng)用指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)求解問題,可使程序更加簡(jiǎn)潔、靈活應(yīng)用指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)求解問題,可使程序更加簡(jiǎn)潔、緊湊、高效。緊湊、高效。11.1 概述第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.1 11.1 概述概述/ /存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)l存儲(chǔ)單元地址存儲(chǔ)單元地址: :存儲(chǔ)單元在內(nèi)存中的排列序號(hào)(編號(hào))。存儲(chǔ)單元在內(nèi)存中的排列序號(hào)(編號(hào))。l存儲(chǔ)分配存儲(chǔ)分配: :系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針分配連續(xù)存儲(chǔ)系統(tǒng)為變量、

4、數(shù)組、結(jié)構(gòu)體、指針分配連續(xù)存儲(chǔ)單元,用于存儲(chǔ)有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、單元,用于存儲(chǔ)有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、指針名代表連續(xù)存儲(chǔ)單元首地址。指針名代表連續(xù)存儲(chǔ)單元首地址。l指針變量(指針)指針變量(指針): :為其分配的存儲(chǔ)單元用于保存其它變量、為其分配的存儲(chǔ)單元用于保存其它變量、數(shù)組、結(jié)構(gòu)體的地址。通過改變其所存儲(chǔ)的地址內(nèi)容實(shí)現(xiàn)數(shù)組、結(jié)構(gòu)體的地址。通過改變其所存儲(chǔ)的地址內(nèi)容實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。l示例:示例: INTEGER,TARGET : I=1255INTEGER,TARGET : I=1255 REAL : R=534.45 REAL : R=534

5、.45 CHARACTER CHARACTER* *5 :S=CHINA5 :S=CHINA INTEGER : A(3)=(/35,45,55/) INTEGER : A(3)=(/35,45,55/) INTEGER,POINTER : P INTEGER,POINTER : P P=I P=I11.1 概述第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.1 11.1 概述概述/ /訪問方式訪問方式11.1 概述第十一章第十一章 指針與動(dòng)態(tài)數(shù)

6、據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)l直接訪問直接訪問: :直接訪問存儲(chǔ)單元中的內(nèi)容。如對(duì)普通變量、數(shù)直接訪問存儲(chǔ)單元中的內(nèi)容。如對(duì)普通變量、數(shù)組元素、結(jié)構(gòu)體成員的訪問,采用直接訪問方式。如圖組元素、結(jié)構(gòu)體成員的訪問,采用直接訪問方式。如圖11-11-2 2所示。所示。l間接訪問間接訪問: :先從存儲(chǔ)單元中得到被訪問存儲(chǔ)單元地址,然后先從存儲(chǔ)單元中得到被訪問存儲(chǔ)單元地址,然后通過該地址訪問被訪問存儲(chǔ)單元中的內(nèi)容。如對(duì)指針變量通過該地址訪問被訪問存儲(chǔ)單元中的內(nèi)容。如對(duì)指針變量的訪問,采用間接訪問方式。如圖的訪問,采用間接訪問方式。如圖11-311-3所示。所示。l指針變量存儲(chǔ)單元中保存目標(biāo)變量地址,通常用箭

7、頭表示。指針變量存儲(chǔ)單元中保存目標(biāo)變量地址,通常用箭頭表示。F90F90指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。l指針變量聲明后指針變量聲明后, ,未分配存儲(chǔ)空間未分配存儲(chǔ)空間, ,訪問前需分配存儲(chǔ)空間。訪問前需分配存儲(chǔ)空間。 ( (示例示例) )I I125125125125J J3753753 3* *125125I=125I=125J=3J=3* *I IP PI I125125125125J J3753753 3* *1251253 3* *P PI I地址地址I=125I=125P=IP=IJ=3J=3* *I I概述概述存儲(chǔ)結(jié)

8、構(gòu)存儲(chǔ)結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.1 11.1 概述概述/ /指針聲明指針聲明11.1 概述第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)lPOINTERPOINTER屬性屬性: :通過通過POINTERPOINTER屬性聲明指針變量。屬性聲明指針變量。lTARGETTARGET屬性屬性: :通過通過TARGETTARGET屬性聲明指針可指的目標(biāo)變量。屬性聲明指針可指的目標(biāo)變量。l一般格式:一般格式: ,POINTER:,POINTER:, 或或 POINTER POINTER , 例:例:

9、 REAL Q1,Q2REAL Q1,Q2 INTEGER,POINTER:P1,P2 INTEGER,POINTER:P1,P2! !聲明指向整型變量的指針聲明指向整型變量的指針P1P1和和P2P2 POINTER Q1 POINTER Q1 ! !聲明指向?qū)嵭妥兞康闹羔樎暶髦赶驅(qū)嵭妥兞康闹羔楺1Q1 POINTER IQ1,IQ2 POINTER IQ1,IQ2! !聲明指向整型變量的指針聲明指向整型變量的指針I(yè)Q1IQ1和和IQ2IQ2 概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.1 11

10、.1 概述概述/ /指針狀態(tài)指針狀態(tài)11.1 概述第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)l指針有三種狀態(tài)指針有三種狀態(tài): :未定義、空指針、被關(guān)聯(lián)。未定義、空指針、被關(guān)聯(lián)。u未定義:程序在初始狀態(tài)中未定義所有指針。未定義:程序在初始狀態(tài)中未定義所有指針。u空指針:指針已定義,但未成為目標(biāo)變量別名??罩羔槪褐羔樢讯x,但未成為目標(biāo)變量別名。u被關(guān)聯(lián):指針已定義,已成為目標(biāo)變量別名。被關(guān)聯(lián):指針已定義,已成為目標(biāo)變量別名。概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.1 11.1 概述

11、概述/ /概述概述/ /動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)示例動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)示例l靜態(tài)數(shù)據(jù)結(jié)構(gòu)靜態(tài)數(shù)據(jù)結(jié)構(gòu): :在編譯時(shí)為其分配存儲(chǔ)空間在編譯時(shí)為其分配存儲(chǔ)空間, ,大小不能改變。大小不能改變。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :分配算法簡(jiǎn)單分配算法簡(jiǎn)單, ,易于實(shí)現(xiàn)易于實(shí)現(xiàn), ,使用方便。使用方便。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :易浪費(fèi)存儲(chǔ)空間易浪費(fèi)存儲(chǔ)空間, ,易產(chǎn)生下標(biāo)越界錯(cuò)誤。易產(chǎn)生下標(biāo)越界錯(cuò)誤。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu): :在運(yùn)行時(shí)為其分配存儲(chǔ)空間在運(yùn)行時(shí)為其分配存儲(chǔ)空間, ,大小可改變。大小可改變。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :可節(jié)約存儲(chǔ)空間,靈活,應(yīng)用廣??晒?jié)約存儲(chǔ)空間,靈活,應(yīng)

12、用廣。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :分配算法復(fù)雜分配算法復(fù)雜, ,實(shí)現(xiàn)難度大。實(shí)現(xiàn)難度大。 象象鏈表、樹結(jié)構(gòu)、圖結(jié)構(gòu)鏈表、樹結(jié)構(gòu)、圖結(jié)構(gòu)等數(shù)據(jù)結(jié)構(gòu)都適合用動(dòng)態(tài)數(shù)據(jù)等數(shù)據(jù)結(jié)構(gòu)都適合用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。 指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和靈活應(yīng)用指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)求解問題,可使程序更加簡(jiǎn)潔、靈活應(yīng)用指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)求解問題,可使程序更加簡(jiǎn)潔、緊湊、高效。緊湊、高效。11.1 概述第二章第二章 FORTRAN90FORTRAN90開發(fā)環(huán)境開發(fā)環(huán)境a

13、a1 1a a2 2a an n 鏈表鏈表樹結(jié)構(gòu)樹結(jié)構(gòu)圖結(jié)構(gòu)圖結(jié)構(gòu)概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.1 11.1 概述概述/ /存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)/ /示例示例l存儲(chǔ)單元地址存儲(chǔ)單元地址: :存儲(chǔ)單元在內(nèi)存中的排列序號(hào)(編號(hào))。存儲(chǔ)單元在內(nèi)存中的排列序號(hào)(編號(hào))。l存儲(chǔ)分配存儲(chǔ)分配: :系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針分配連續(xù)存儲(chǔ)系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針分配連續(xù)存儲(chǔ)單元,用于存儲(chǔ)有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、單元,用于存儲(chǔ)有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、指針名代表連續(xù)存

14、儲(chǔ)單元首地址。指針名代表連續(xù)存儲(chǔ)單元首地址。l指針變量(指針)指針變量(指針): :為其分配的存儲(chǔ)單元用于保存其它變量、為其分配的存儲(chǔ)單元用于保存其它變量、數(shù)組、結(jié)構(gòu)體的地址。通過改變其所存儲(chǔ)的地址內(nèi)容實(shí)現(xiàn)數(shù)組、結(jié)構(gòu)體的地址。通過改變其所存儲(chǔ)的地址內(nèi)容實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。l示例:示例: INTEGER,TARGET : I=1255INTEGER,TARGET : I=1255 REAL : R=534.45 REAL : R=534.45 CHARACTER CHARACTER* *5 :S=CHINA5 :S=CHINA INTEGER : A(3)=(/35,45,55/)

15、INTEGER : A(3)=(/35,45,55/) INTEGER,POINTER : P INTEGER,POINTER : P P=I P=I11.1 概述第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu) 12551255534.45534.45CHINACHINA35354545555510001000整型變量整型變量I,I,地址地址1000,41000,4字節(jié)字節(jié), ,值值12551255實(shí)型變量實(shí)型變量R,R,地址地址1004,41004,4字節(jié)字節(jié), ,值值534.45534.45字符型變量字符型變量S,S,地址地址1008,51008,5字節(jié)字節(jié), ,值值CHINACH

16、INA整型數(shù)組整型數(shù)組A,A,地址地址1013,121013,12字節(jié)字節(jié), ,值值3535、4545、5555指針變量指針變量P,P,地址地址1025,41025,4字節(jié)字節(jié), ,值為值為100010000 01 11000100010041004100810081013101310251025n n概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.1 11.1 概述概述/ /訪問方式訪問方式/ /示例示例11.1 概述第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)l直接訪問直接訪問: :直

17、接訪問存儲(chǔ)單元中的內(nèi)容。如對(duì)普通變量、數(shù)直接訪問存儲(chǔ)單元中的內(nèi)容。如對(duì)普通變量、數(shù)組元素、結(jié)構(gòu)體成員的訪問,采用直接訪問方式。如圖組元素、結(jié)構(gòu)體成員的訪問,采用直接訪問方式。如圖11-11-2 2所示。所示。l間接訪問間接訪問: :先從存儲(chǔ)單元中得到被訪問存儲(chǔ)單元地址,然后先從存儲(chǔ)單元中得到被訪問存儲(chǔ)單元地址,然后通過該地址訪問被訪問存儲(chǔ)單元中的內(nèi)容。如對(duì)指針變量通過該地址訪問被訪問存儲(chǔ)單元中的內(nèi)容。如對(duì)指針變量的訪問,采用間接訪問方式。如圖的訪問,采用間接訪問方式。如圖11-311-3所示。所示。l指針變量存儲(chǔ)單元中保存目標(biāo)變量地址,通常用箭頭表示。指針變量存儲(chǔ)單元中保存目標(biāo)變量地址,通常用

18、箭頭表示。F90F90指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。l指針變量聲明后指針變量聲明后, ,未分配存儲(chǔ)空間未分配存儲(chǔ)空間, ,訪問前需分配存儲(chǔ)空間。訪問前需分配存儲(chǔ)空間。 ( (示例示例) )I I125125125125J J3753753 3* *125125I=125I=125J=3J=3* *I IP PI I125125125125J J3753753 3* *1251253 3* *P PI I地址地址I=125I=125P=IP=IJ=3J=3* *I II I2525! !例例11.1 11.1 使用指針實(shí)現(xiàn)兩個(gè)整數(shù)

19、交換使用指針實(shí)現(xiàn)兩個(gè)整數(shù)交換INTEGER,TARGET : I,J INTEGER,TARGET : I,J ! !聲明兩個(gè)目標(biāo)變量聲明兩個(gè)目標(biāo)變量I I和和J JINTEGER,POINTER : P1,P2,P3 INTEGER,POINTER : P1,P2,P3 ! !聲明三個(gè)指針變量聲明三個(gè)指針變量P1P1、P2P2和和P3P3I=25;J=35 I=25;J=35 ! !給目標(biāo)變量給目標(biāo)變量I I和和J J直接賦值直接賦值P1=I;P2=JP1=I;P2=J ! !給指針分配指向給指針分配指向I I和和J J的存儲(chǔ)空間的存儲(chǔ)空間 PRINTPRINT* *, ,未交換數(shù)據(jù):未交換

20、數(shù)據(jù):,P1,P2 ,P1,P2 ! !通過指針變量間接輸出通過指針變量間接輸出I I和和J J的值的值P3=P1;P1=P2;P2=P3 P3=P1;P1=P2;P2=P3 ! !交換指針交換指針P1P1和和P2P2指向的目標(biāo)變量指向的目標(biāo)變量PRINTPRINT* *, ,已交換數(shù)據(jù):已交換數(shù)據(jù): ,P1,P2 ,P1,P2 ! !通過指針變量間接輸出通過指針變量間接輸出J J和和I I的值的值ENDENDI I2525P1P1圖圖11-4 11-4 指針交換指針交換J J3535P2P2J J3535P2P2P1P1P3P3交換前交換前交換后交換后概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問方式訪問方式

21、指針聲明指針聲明指針狀態(tài)指針狀態(tài)03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.2 11.2 指針引用和賦值指針引用和賦值/ /指針引用指針引用l指針引用:指針引用:引用指針?biāo)改繕?biāo)變量。引用指針?biāo)改繕?biāo)變量。11.2 指針引用和賦值第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針引用指針引用指針賦值指針賦值結(jié)構(gòu)體指針結(jié)構(gòu)體指針! !例例11.211.2INTEGER,TARGET : R=25INTEGER,TARGET : R=25INTEGER,POINTER : PINTEGER,POINTER : PP=RP=RM=3M=3* *P-4P-4PRIN

22、TPRINT* *, P,M, P,MENDEND! !結(jié)果:結(jié)果:2525,7171! !例例11.311.3INTEGER,POINTERINTEGER,POINTER:P1,PP1,PINTEGER,TARGETINTEGER,TARGET:R=12R=12P=RP=RR=2R=2* *P PPRINTPRINT* *,P,R,P,RENDEND! !結(jié)果:結(jié)果:2424,2424! !例例11.411.4INTEGER,TARGETINTEGER,TARGET:R=13R=13INTEGER,POINTERINTEGER,POINTER:P1,P2P1,P2PRINTPRINT* *,

23、P1,P2,R ,P1,P2,R P1=RP1=RP2=P1P2=P1ENDEND ! !結(jié)果:結(jié)果:1313,1313,131303/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.2 11.2 指針引用和賦值指針引用和賦值/ /指針賦值指針賦值l別名賦值:別名賦值:將目標(biāo)變量名作為別名賦值給指針。將目標(biāo)變量名作為別名賦值給指針。l數(shù)據(jù)賦值:數(shù)據(jù)賦值:將數(shù)據(jù)表達(dá)式值賦值給指針?biāo)改繕?biāo)變量。將數(shù)據(jù)表達(dá)式值賦值給指針?biāo)改繕?biāo)變量。l一般格式:一般格式: = = = = 11.2 指針引用和賦值第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)! !例例11.511.5INT

24、EGR,TARGETINTEGR,TARGET:R1=25R1=25INTEGR,TARGETINTEGR,TARGET:R2=35R2=35INTEGER,POINTERINTEGER,POINTER:P1,P2P1,P2P1=R1P1=R1P2=R2P2=R2P1=P2P1=P2PRINTPRINT* *, P1,P2, P1,P2ENDEND! !結(jié)果:結(jié)果:3535,3535P1P1P1P1R1R12525R2R2P2P23535R1R13535R2R2P2P23535指針引用指針引用指針賦值指針賦值結(jié)構(gòu)體指針結(jié)構(gòu)體指針03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心

25、11.2 11.2 指針引用和賦值指針引用和賦值/ /結(jié)構(gòu)體指針結(jié)構(gòu)體指針11.2 指針引用和賦值第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)l結(jié)構(gòu)體指針:結(jié)構(gòu)體指針:指向結(jié)構(gòu)體的指針。指針可為結(jié)構(gòu)體別名。指向結(jié)構(gòu)體的指針。指針可為結(jié)構(gòu)體別名。 例:例: TYPE date_recordTYPE date_record INTEGER(2) year INTEGER(2) year INTEGER(1) month,day INTEGER(1) month,day END TYPE date_record END TYPE date_record TYPE(date_record),

26、TARGET : date TYPE(date_record),TARGET : date TYPE(date_record),POINTER : P TYPE(date_record),POINTER : P P=dateP=date P.year=1995 P.year=1995;P.month=12P.month=12;P.day=25P.day=25 y=3+P.year y=3+P.year; m=P.month-2m=P.month-2;d=5+P.dayd=5+P.day PRINT PRINT* *,date,date PRINT PRINT* *,P,P PRINT PRIN

27、T* *,y,m,d,y,m,d END END ! !輸出結(jié)果:輸出結(jié)果: !1995 12 25!1995 12 25 !1995 12 25 !1995 12 25 !1998 10 30 !1998 10 30YearYearMonthMonthdaydayP Pdatedate1995199512122525P Pdatedate指針引用指針引用指針賦值指針賦值結(jié)構(gòu)體指針結(jié)構(gòu)體指針03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.3 11.3 整型指針整型指針/ /概述概述l整型指針整型指針: :地址按地址按4 4字節(jié)整數(shù)對(duì)待的指針。整型指針可參與字節(jié)整數(shù)對(duì)待的

28、指針。整型指針可參與整數(shù)運(yùn)算。整數(shù)運(yùn)算。l整型指針組成整型指針組成: :指針、基變量、目標(biāo)對(duì)象。指針、基變量、目標(biāo)對(duì)象。l創(chuàng)建指針步驟創(chuàng)建指針步驟: :u第一步:將一個(gè)指針基變量鏈接在一個(gè)整型指針上。第一步:將一個(gè)指針基變量鏈接在一個(gè)整型指針上。 POINTER(POINTER( , )u第二步:將目標(biāo)對(duì)象地址賦值給整型指針。第二步:將目標(biāo)對(duì)象地址賦值給整型指針。 =LOC(=LOC() =MALLOC(=MALLOC()l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)LOCLOC功能功能: :獲得目標(biāo)對(duì)象起始內(nèi)存地址。獲得目標(biāo)對(duì)象起始內(nèi)存地址。l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)MALLOCMALLOC功能功能: :計(jì)算表達(dá)式值計(jì)算表達(dá)式

29、值n n,分配,分配n n個(gè)字節(jié)存儲(chǔ)單個(gè)字節(jié)存儲(chǔ)單元,獲得存儲(chǔ)單元起始地址。元,獲得存儲(chǔ)單元起始地址。 (示例示例)11.3 整型指針第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述例例11.611.6例例11.711.703/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.3 11.3 整型指針整型指針/ /例例11.611.6分析下面程序分析下面程序 REAL A(10),B(5) REAL A(10),B(5) POINTER POINTER(P,BP,B) P=LOC(A)P=LOC(A) A(2)=125.0 A(2)=125.0 ! !等價(jià)于設(shè)置等價(jià)

30、于設(shè)置B(2)B(2)為為125.0125.0 PRINT PRINT* *, B(2) , B(2) END END通過通過POINTERPOINTER語句語句, ,將指針基數(shù)組將指針基數(shù)組B B與目標(biāo)對(duì)象數(shù)組與目標(biāo)對(duì)象數(shù)組A A建立聯(lián)系建立聯(lián)系, ,即指針即指針P P中存放的數(shù)組中存放的數(shù)組A A的起始地址就是數(shù)組的起始地址就是數(shù)組B B的起始地址的起始地址, ,所所以運(yùn)行程序后以運(yùn)行程序后, ,輸出輸出B(2)B(2)的值為的值為125.0125.0。 11.3 整型指針第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述例例11.611.6例例11.711.703/04第二學(xué)

31、期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.3 11.3 整型指針整型指針/ /例例11.711.7分析下面程序分析下面程序 INTEGER : A(5),BINTEGER : A(5),B POINTER POINTER(P,BP,B) P=LOC(A)P=LOC(A) DO I=1,5 DO I=1,5 B=I B=I* *1010 P=P+4 P=P+4 ENDDO ENDDO PRINT PRINT* *,A,A END END ! !輸出結(jié)果為:輸出結(jié)果為: 10 20 30 40 5010 20 30 40 50 通過指針運(yùn)算和指針基變量通過指針運(yùn)算和指針基變量B B的

32、賦值操作的賦值操作, ,生成數(shù)組生成數(shù)組A A的的5 5個(gè)元個(gè)元素值。通過指針運(yùn)算和指針基變量素值。通過指針運(yùn)算和指針基變量B B的賦值操作的賦值操作, ,生成數(shù)組生成數(shù)組A A的的5 5個(gè)元素值。整型指針個(gè)元素值。整型指針P P增加增加4,4,相當(dāng)于把數(shù)組的下標(biāo)加相當(dāng)于把數(shù)組的下標(biāo)加1 1。11.3 整型指針第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)A AB B1 2 3 4 51 2 3 4 5P PP PP PP PP P概述概述例例11.611.6例例11.711.703/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.3 11.3 整型指針整型指針/ /

33、概述概述/ /示例示例l整型指針整型指針: :地址按地址按4 4字節(jié)整數(shù)對(duì)待的指針。整型指針可參與字節(jié)整數(shù)對(duì)待的指針。整型指針可參與整數(shù)運(yùn)算。整數(shù)運(yùn)算。l整型指針組成整型指針組成: :指針、基變量、目標(biāo)對(duì)象。指針、基變量、目標(biāo)對(duì)象。l創(chuàng)建指針步驟創(chuàng)建指針步驟: :u第一步:將一個(gè)指針基變量鏈接在一個(gè)整型指針上。第一步:將一個(gè)指針基變量鏈接在一個(gè)整型指針上。 POINTER(POINTER( , )u第二步:將目標(biāo)對(duì)象地址賦值給整型指針。第二步:將目標(biāo)對(duì)象地址賦值給整型指針。 =LOC(=LOC() =MALLOC(=MALLOC()l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)LOCLOC功能功能: :獲得目標(biāo)對(duì)象起始內(nèi)

34、存地址。獲得目標(biāo)對(duì)象起始內(nèi)存地址。l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)MALLOCMALLOC功能功能: :計(jì)算表達(dá)式值計(jì)算表達(dá)式值n n,分配,分配n n個(gè)字節(jié)存儲(chǔ)單個(gè)字節(jié)存儲(chǔ)單元,獲得存儲(chǔ)單元起始地址。元,獲得存儲(chǔ)單元起始地址。 (示例示例)11.1 概述第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述例例11.611.6例例11.711.7INTEGER INTEGER :I,J=20I,J=20POINTERPOINTER(P,IP,I)! !建立指針基變量建立指針基變量I I和目標(biāo)對(duì)象和目標(biāo)對(duì)象J J的等價(jià)關(guān)系的等價(jià)關(guān)系P=LOC(J) P=LOC(J) ! !將目標(biāo)對(duì)象將目標(biāo)對(duì)象J J

35、的地址賦予整型指針變量的地址賦予整型指針變量P PPRINTPRINT* *,P,I,J ,P,I,J ! !輸出結(jié)果為:輸出結(jié)果為:4442932 20 204442932 20 20I=30I=30PRINTPRINT* *,P,I,J ,P,I,J ! !輸出結(jié)果為:輸出結(jié)果為:4442932 30 304442932 30 30J=40J=40PRINTPRINT* *,P,I,J ,P,I,J ! !輸出結(jié)果為:輸出結(jié)果為:4442932 40 404442932 40 40ENDEND03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.4 11.4 整型指針整型

36、指針/NULLIFY/NULLIFYlNULLIFY:NULLIFY:將指針設(shè)置為空狀態(tài)??諣顟B(tài)可用標(biāo)準(zhǔn)函數(shù)將指針設(shè)置為空狀態(tài)??諣顟B(tài)可用標(biāo)準(zhǔn)函數(shù)ASSOCIATEDASSOCIATED進(jìn)行檢測(cè)。進(jìn)行檢測(cè)。 指針聲明后,一般應(yīng)將其設(shè)置為空狀態(tài)。指針聲明后,一般應(yīng)將其設(shè)置為空狀態(tài)。 如:如:INTEGERINTEGER,POINTER : PPOINTER : P NULLIFY NULLIFY(P P)11.4 與指針相關(guān)的函數(shù)和語句第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEAL

37、LOCATEDEALLOCATE03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.4 11.4 整型指針整型指針/ASSOCIATED/ASSOCIATEDlASSOCIATED:ASSOCIATED:判定是否有目標(biāo)對(duì)象與指針鏈接。判定是否有目標(biāo)對(duì)象與指針鏈接。 如:如: REAL A1(:),A2(:),A3(5)REAL A1(:),A2(:),A3(5) POINTER A1,A2 POINTER A1,A2 TARGET A3 TARGET A3 LOGICAL S1,S2,S3 LOGICAL S1,S2,S3 A1=A3 A1=A3 !指針賦值!指針賦值 A2

38、=A3 A2=A3 !指針賦值!指針賦值 S1=ASSOCIATED(A1)S1=ASSOCIATED(A1)!結(jié)果!結(jié)果TRUE;TRUE;指針指針A1A1已指向目標(biāo)變量已指向目標(biāo)變量 S2=ASSOCIATED(A1,A3) S2=ASSOCIATED(A1,A3) !結(jié)果!結(jié)果TRUE;A1TRUE;A1已指向已指向A3A3 S3=ASSOCIATED(A1,A2) S3=ASSOCIATED(A1,A2) !結(jié)果!結(jié)果TRUE;A1TRUE;A1和和A2A2都指向都指向A3A311.4 與指針相關(guān)的函數(shù)和語句第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)NULLIFYNULLI

39、FYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATE03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.4 11.4 整型指針整型指針/ALLOCATE/ALLOCATElALLOCATE:ALLOCATE:為指針分配所指向的存儲(chǔ)空間。為指針分配所指向的存儲(chǔ)空間。 如:如: REALREAL,POINTER : P1POINTER : P1 ALLOCATE(P1) ALLOCATE(P1) P1=911.911 P1=911.91111.4 與指針相關(guān)的函數(shù)和語句第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)

40、數(shù)據(jù)結(jié)構(gòu)NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATEP1P1P1P1911.911911.91103/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.4 11.4 整型指針整型指針/DEALLOCATE/DEALLOCATElDEALLOCATE:DEALLOCATE:釋放指針?biāo)复鎯?chǔ)空間。釋放指針?biāo)复鎯?chǔ)空間。 如:如: REALREAL,POINTER : P1POINTER : P1 ALLOCATE(P1) ALLOCATE(P1) P1=911.911 P1=911.91

41、1 DEALLOCATE DEALLOCATE(P1P1)11.4 與指針相關(guān)的函數(shù)和語句第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)P1P1P1P1911.911911.911NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATE03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.5 11.5 指針數(shù)組指針數(shù)組/ /指針數(shù)組指針數(shù)組11.5 指針數(shù)組第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針數(shù)組指針數(shù)組函數(shù)返回函數(shù)返回l指針數(shù)組指針數(shù)組: :具有具有POINTE

42、RPOINTER屬性的數(shù)組。指針數(shù)組類似動(dòng)態(tài)數(shù)屬性的數(shù)組。指針數(shù)組類似動(dòng)態(tài)數(shù)組,聲明時(shí),指針數(shù)組不指定數(shù)組維的上下界。如:組,聲明時(shí),指針數(shù)組不指定數(shù)組維的上下界。如: REAL,DIMENSION(:),POINTER : AREAL,DIMENSION(:),POINTER : A l存儲(chǔ)分配存儲(chǔ)分配: :指針數(shù)組需通過指針數(shù)組需通過ALLOCATEALLOCATE語句分配存儲(chǔ)空間。如:語句分配存儲(chǔ)空間。如: ALLOCATEALLOCATE(A A(5050) 例:使用指針數(shù)組存儲(chǔ)下三角矩陣。例:使用指針數(shù)組存儲(chǔ)下三角矩陣。 (程序程序)1 0 0 01 0 0 01 1 0 01 1

43、0 01 1 1 01 1 1 01 1 1 11 1 1 1R R RRR11111111111 12 23 34 4T03/04第二學(xué)期第二學(xué)期蘇州科技大學(xué)計(jì)算中心蘇州科技大學(xué)計(jì)算中心11.5 11.5 指針數(shù)組指針數(shù)組/ /函數(shù)返回函數(shù)返回11.5 指針數(shù)組第十一章第十一章 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)lFORTRAN90FORTRAN90允許指針數(shù)組作為函數(shù)值返回。允許指針數(shù)組作為函數(shù)值返回。PROGRAM exam1110PROGRAM exam1110 IMPLICIT NONE IMPLICIT NONE INTEGER,DIMENSION(10): X=(/11,8,1

44、5,4,20,3,5,18,21,17/) INTEGER,DIMENSION(10): X=(/11,8,15,4,20,3,5,18,21,17/) PRINT PRINT (20I3)(20I3),array(X),array(X)CONTAINS CONTAINS FUNCTION array(A) FUNCTION array(A) INTEGER,DIMENSION(:), POINTER : array INTEGER,DIMENSION(:), POINTER : array INTEGER,DIMENSION(:) : A INTEGER,DIMENSION(:) : A I

45、NTEGER I,J,T INTEGER I,J,T ALLOCATE(array(SIZE(A) ALLOCATE(array(SIZE(A) ! !為為arrayarray數(shù)組分配存儲(chǔ)單元數(shù)組分配存儲(chǔ)單元 array=Aarray=A DO I=1,SIZE(A)-1 DO I=1,SIZE(A)-1 DO J=I+1,SIZE(A) DO J=I+1,SIZE(A) IF (array(I)array(J) THEN IF (array(I)array(J) THEN T=array(J) T=array(J) array(J)=array(I) array(J)=array(I) array(I)=T array(I)=T ENDIF ENDIF ENDDO ENDDO ENDDO ENDDO END

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論