Fortran程序設(shè)計(jì)第7章屬性聲明_第1頁(yè)
Fortran程序設(shè)計(jì)第7章屬性聲明_第2頁(yè)
Fortran程序設(shè)計(jì)第7章屬性聲明_第3頁(yè)
Fortran程序設(shè)計(jì)第7章屬性聲明_第4頁(yè)
Fortran程序設(shè)計(jì)第7章屬性聲明_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第7章 屬性的聲明最后,對(duì)于數(shù)據(jù)我們剩下的工作,就是如何運(yùn)用FROTRAN語(yǔ)言來(lái)完整地加以描述。FORTRAN語(yǔ)言完成對(duì)數(shù)據(jù)的描述的語(yǔ)法單位是數(shù)據(jù)聲明語(yǔ)句,在前面2章里面,我們整理好問(wèn)題當(dāng)中需要涉及的數(shù)據(jù)及其結(jié)構(gòu)之后,要以FORTRAN語(yǔ)言寫(xiě)下來(lái),就是使用FORTRAN的聲明語(yǔ)句,這些語(yǔ)句的句法設(shè)計(jì)保證能夠完備的描述我們關(guān)于數(shù)據(jù)所需要說(shuō)明的一切屬性。數(shù)據(jù)對(duì)象首先需要予以說(shuō)明的當(dāng)然就是它的類(lèi)型,因此我們首先給出對(duì)象的類(lèi)型聲明語(yǔ)句,特別地,需要說(shuō)明在最初FORTRAN標(biāo)準(zhǔn)里面遺留下來(lái)的一種數(shù)據(jù)類(lèi)型描述方法隱式類(lèi)型描述法,然后討論各種數(shù)據(jù)對(duì)象所可能具有的屬性。 數(shù)組屬性; 指針屬性; 值特征; 對(duì)象

2、可訪問(wèn)性與使用屬性; 特征兼容性; 自動(dòng)數(shù)據(jù)對(duì)象; 存儲(chǔ)關(guān)聯(lián)。由于本章集中討論FORTRAN的聲明語(yǔ)句,而聲明的對(duì)象除了數(shù)據(jù)之外,其他的程序?qū)ο?,例如函?shù),過(guò)程等也需要聲明其類(lèi)型或?qū)傩裕虼吮菊乱徊⒂懻搶?duì)其他程序?qū)ο蟮穆暶鳎?過(guò)程屬性; NAMELIST語(yǔ)句; 7.1 屬性及其聲明方式所謂一個(gè)對(duì)象的屬性,就是程序使用該對(duì)象的方式。本章所討論的屬性的大體分類(lèi)與作為其名稱(chēng)的關(guān)鍵詞見(jiàn)表7-1:表7-1屬性的分類(lèi)及其關(guān)鍵詞數(shù)據(jù)類(lèi)型 INTEGER REAL(以及DOUBLE PRECISION) COMPLEX LOGICAL CHARACTER TYPE(派生類(lèi)型的名稱(chēng)由用戶(hù)命名)數(shù)組屬性 DIME

3、NSION ALLOCATABLE指針屬性 POINTER TARGET值設(shè)置 DATA PARAMETER對(duì)象可訪問(wèn)性與調(diào)用 PUBLIC PRIVATE INTENT OPTIONAL SAVE過(guò)程屬性 EXTERNAL INTRINSIC對(duì)象關(guān)系屬性 NAMELIST EQUIVALENCE COMMON 這些關(guān)鍵詞的使用,或者說(shuō)屬性的聲明有2種方式: 在類(lèi)型聲明時(shí)附加屬性說(shuō)明,這種語(yǔ)句形式側(cè)重在給出數(shù)據(jù)對(duì)象,屬性說(shuō)明是附加的; 使用單獨(dú)的屬性聲明語(yǔ)句,這種語(yǔ)句形式側(cè)重在說(shuō)明屬性本身。之所以會(huì)出現(xiàn)2種聲明方式,完全是歷史的緣故。FORTRAN的早期版本里,任何的對(duì)象屬性說(shuō)明,都是運(yùn)用單獨(dú)

4、的屬性聲明語(yǔ)句,如果一個(gè)數(shù)據(jù)對(duì)象同時(shí)具有多種屬性,就需要使用相應(yīng)的多個(gè)屬性聲明語(yǔ)句,從程序閱讀的角度來(lái)看,會(huì)顯得很煩瑣,因此到了FORTRAN90和95版本,只要在程序單元當(dāng)中需要聲明一個(gè)數(shù)據(jù)對(duì)象的類(lèi)型,那么就可以把它的其他所有屬性都附加到它的類(lèi)型聲明語(yǔ)句當(dāng)中,使得程序顯得更加緊湊?!纠?-1】 我們要定義2個(gè)實(shí)型變量X,Y,同時(shí)還要聲明它們都具有指針屬性,在早期FORTRAN語(yǔ)言里寫(xiě)為: REAL X,Y POINTER X,Y換一種更加緊湊的寫(xiě)法就是把這2條語(yǔ)句寫(xiě)為1句: REAL POINTER:X,Y之所以我們還需要討論單獨(dú)的屬性語(yǔ)句,主要是有時(shí)候需要保持源碼的向前兼容性,而且在少數(shù)情

5、況下,這2種形式也并完全等價(jià)。因此在本章在討論各種屬性的聲明方式的時(shí)候,將首先給出面向數(shù)據(jù)對(duì)象的聲明方式,然后給出等價(jià)的面向?qū)傩缘穆暶鞣绞?。在這2種表示屬性的方式里,同樣由于歷史的緣故,數(shù)組的維度屬性DIMENSION既可以附加在類(lèi)型聲明語(yǔ)句當(dāng)中表述,也可以單獨(dú)聲明,實(shí)際上DIMENSION這個(gè)關(guān)鍵詞屬于老式FORTRAN的遺留物,在新的表述方式里面,完全可以省略它?!纠?-2】 COMPLEX X DIMENSION X(35) SAVE X COMPLEX X(35) SAVE X COMPLEX,DIMENSION(35),SAVE:X COMPLEX,SAVE:X(35)以上4種表述方

6、式是完全等價(jià)的,顯然最后一種最簡(jiǎn)潔。在一個(gè)程序單元里面,引用一個(gè)數(shù)據(jù)對(duì)象的前提是已經(jīng)聲明了它的種種必需屬性,數(shù)據(jù)對(duì)象的各種屬性里面,最為基本的當(dāng)然是數(shù)據(jù)對(duì)象的類(lèi)型,然后還需要聲明其各種必需的屬性,這樣該數(shù)據(jù)對(duì)象才能被程序正確地調(diào)用訪問(wèn)。然而在一個(gè)實(shí)際的程序里面,數(shù)據(jù)對(duì)象的聲明在表面上可能并不是完備的,同時(shí)又不是非法的語(yǔ)法,出現(xiàn)這種情況的原因如下: 在FORTRAN的早期版本里,為了求簡(jiǎn)化的緣故,使用了一種隱式約定數(shù)據(jù)類(lèi)型的方式,即通過(guò)數(shù)據(jù)對(duì)象的名稱(chēng)的第一個(gè)字母來(lái)分辨其所屬類(lèi)型,這種類(lèi)型聲明方式被后來(lái)的FORTRAN版本一直沿用下來(lái)了,因此如果一個(gè)程序單元里出現(xiàn)的數(shù)據(jù)對(duì)象沒(méi)有經(jīng)過(guò)類(lèi)型聲明語(yǔ)句的專(zhuān)

7、門(mén)聲明,則需要考慮其是否屬于隱式聲明。相反,如果想排除這種隱式聲明的影響,則需要另外單獨(dú)加以IMPLICIT NONE語(yǔ)句作為聲明。 任何其他的屬性如果沒(méi)有出現(xiàn)的話(huà),或者是因?yàn)樵摂?shù)據(jù)對(duì)象不需要某種屬性,或者是該數(shù)據(jù)對(duì)象的某種屬性采取了默認(rèn)設(shè)置。從上面的分類(lèi)表7-1可以看到,F(xiàn)ORTRAN的屬性除了用來(lái)說(shuō)明數(shù)據(jù)類(lèi)型的屬性之外,其他屬性都是針對(duì)不同的數(shù)據(jù)類(lèi)型或程序?qū)ο?,以及它們的各種特征的。例如數(shù)組屬性只是用來(lái)說(shuō)明數(shù)組,指針屬性只是用來(lái)說(shuō)明指針,而過(guò)程屬性只是用來(lái)說(shuō)明過(guò)程,下面將分類(lèi)討論這些屬性。7.2 類(lèi)型聲明語(yǔ)句 我們?cè)谟懻摰?章討論數(shù)據(jù)類(lèi)型的時(shí)候給出數(shù)據(jù)類(lèi)型的基本聲明語(yǔ)句的句法形式,這里將側(cè)

8、重于數(shù)據(jù)類(lèi)型的聲明與其他相關(guān)屬性的兼容,因?yàn)閺恼Z(yǔ)言的簡(jiǎn)潔與自然的角度出發(fā),把一個(gè)數(shù)據(jù)對(duì)象的類(lèi)型和其他屬性都?xì)w結(jié)為一條數(shù)據(jù)聲明語(yǔ)句是非??扇〉?,所以我們得到如下的一般的類(lèi)型聲明句法形式(R501): type-specification ,attribute- specification: entity-declaration-list即作為選項(xiàng),在一條數(shù)據(jù)對(duì)象的類(lèi)型聲明(type-specification)語(yǔ)句當(dāng)中,在數(shù)據(jù)項(xiàng)聲明的列表(entity-declaration-list)之前,給出相應(yīng)的屬性說(shuō)明(attribute- specification),方括號(hào)表示可選。 類(lèi)型說(shuō)明(ty

9、pe-specification)的一般句法形式(R502)是如下幾種形式之一: INTEGER kind-selector REAL kind-selector DOUBLE PRECISION COMPLEX kind-selector CHARACTER character-selector LOGICAL kind-selector TYPE(type-name)其中種別選擇符(kind-selector)的句法形式(R506)為: (KIND = kind-value)其中種別值(kind-value)是一個(gè)標(biāo)量整型表達(dá)式。 屬性說(shuō)明(attribute- specification

10、)的一般句法形式(R503)為如下幾種形式之一: PARAMETER ALLOCATABLE DIMENSION(array- specification) EXTERNAL INTENT(intent-specification) INTRINSIC OPTIONAL POINTER SAVE TARGET access- specification其中的可訪問(wèn)性說(shuō)明(access- specification)包括PUBLIC和PRIVATE。 數(shù)據(jù)項(xiàng)聲明的一般句法形式(R505)為如下2種形式之一: object-name (array- specification) *characte

11、r-length initialization function-name (array- specification) *character-length其中初始化(initialization)的一般句法形式(R505)為如下2種形式之一: = initialization-expression =NULL() 類(lèi)型聲明的一般規(guī)則如下: 對(duì)數(shù)據(jù)對(duì)象的說(shuō)明優(yōu)先于隱式類(lèi)型描述,即隱式類(lèi)型描述法永遠(yuǎn)只是在數(shù)據(jù)對(duì)象沒(méi)有獲得任何說(shuō)明的情況下的默認(rèn)法則,而顯式說(shuō)明既可以與隱式法則一致,也可以不一致。 在一個(gè)類(lèi)型聲明語(yǔ)句當(dāng)中,同一個(gè)屬性只能出現(xiàn)一次。 在一個(gè)作用域內(nèi),一個(gè)數(shù)據(jù)項(xiàng)的任何屬性只要約定了一次,

12、就不可再次約定。 種別選擇符所取的種別值只能是編譯系統(tǒng)所許可的相應(yīng)類(lèi)型的種別參數(shù)之一。 字符長(zhǎng)度(character-length)選項(xiàng)只能出現(xiàn)在CHARACTER類(lèi)型的聲明語(yǔ)句當(dāng)中。 如果使用初始化語(yǔ)句,則必須在數(shù)據(jù)項(xiàng)聲明前使用雙冒號(hào)(;)。 如果數(shù)據(jù)變量被初始化設(shè)置為數(shù)組,那么該數(shù)組的形狀一定要得到說(shuō)明,或者是在類(lèi)型聲明語(yǔ)句當(dāng)中,或者是在同一個(gè)作用域內(nèi)此前的屬性聲明語(yǔ)句當(dāng)中。 如果數(shù)據(jù)對(duì)象被賦予PARAMETER屬性,那么其中必須包含初始化語(yǔ)句。 如果在初始化語(yǔ)句當(dāng)中出現(xiàn)符號(hào)=,那么該被初始化的對(duì)象必定具有POINTER屬性;如果在初始化語(yǔ)句當(dāng)中出現(xiàn)符號(hào)=,那么該被初始化的對(duì)象肯定不具有P

13、OINTER屬性。 所謂函數(shù)名稱(chēng)(function-name),或者是一個(gè)外部函數(shù)的名稱(chēng),或者是一個(gè)固有函數(shù)的名稱(chēng),或者是一個(gè)函數(shù)啞過(guò)程的名稱(chēng),或者是一個(gè)語(yǔ)句函數(shù)的名稱(chēng)。 一個(gè)數(shù)組函數(shù)名稱(chēng)或者是被指定為顯形數(shù)組,或者是具有POINTER屬性,從而被指定為待定形數(shù)組。有關(guān)屬性聲明的其他規(guī)則以及屬性之間的兼容性在后面會(huì)詳悉討論?!纠?-3】 下面是一些附加了其他屬性的數(shù)據(jù)類(lèi)型聲明語(yǔ)句: REAL, INTENT(IN) : COS REAL, INTRINSIC : SIN INTEGER X(25) LOGICAL,DIMENSION(10,15):RESULT1,RESULT2 INTEGER

14、,PARAMETER:SHORT=SELECTED_INT_KIND(4) COMPLEX : SQUARE_ROOT = ( 2.76, -0.85) REAL, ALLOCATABLE : X( : , : ) TYPE, POINTER : CURRENT_OF_SAMPLE = NULL()7.2.1 整型INTEGER語(yǔ)句聲明了整型數(shù)據(jù)對(duì)象的名稱(chēng),同時(shí)也可以附加種別參數(shù)以及其他屬性。如果給出種別選擇符,即說(shuō)明該整型數(shù)據(jù)的表示方法。聲明一個(gè)數(shù)據(jù)對(duì)象屬于整型數(shù)據(jù)的基本語(yǔ)句句法為: INTEGER ( KIND = kind-value ) , attribute-list : entry

15、-list【例7-4】 以下這些聲明語(yǔ)句主要是要說(shuō)明數(shù)據(jù)項(xiàng):INTEGER XINTEGER DIMENSION(:), POINTER : days, hoursINTEGER(SHORT)RED_BALLINTEGER(2) POINTER : k, limitINTEGER(1) DIMENSION(10) : min【例7-5】 以下這些聲明語(yǔ)句主要是要說(shuō)明數(shù)據(jù)的屬性: INTEGER days, hours INTEGER(2) k, limit INTEGER(1) min DIMENSION days(:), hours(:), min (10) POINTER days, ho

16、urs, k, limit7.2.2 實(shí)型REAL語(yǔ)句聲明了實(shí)型數(shù)據(jù)對(duì)象的名稱(chēng),同時(shí)也可以附加種別參數(shù)以及其他屬性。如果給出種別選擇符,即說(shuō)明該實(shí)型數(shù)據(jù)的表示方法。雙精度實(shí)型數(shù)據(jù)還可以使用DOUBLE PRECISION語(yǔ)句加以聲明,當(dāng)然與在REAL語(yǔ)句當(dāng)中使用種別參數(shù)是完全等價(jià)的。由于DOUBLE PRECISION本身指出了精度表示方法,因此不能再在后面附加種別選擇符。不過(guò)DOUBLE這個(gè)詞也可以作為一個(gè)命名整型常量,取雙精度實(shí)型的種別參數(shù)值,這樣就可以使用REAL(DOUBLE)來(lái)聲明雙精度實(shí)型數(shù)據(jù)了。實(shí)型數(shù)據(jù)的聲明的格式如下: REAL ( KIND= kind-value ) , a

17、ttribute-list : entry-listDOUBLE PRECISION ,attribute-list : entry-list【例7-6】 下面是各種形式的主要說(shuō)明數(shù)據(jù)項(xiàng)的聲明語(yǔ)句: REAL (KIND = high), OPTIONAL : testval REAL, SAVE : a(10), b(20,30) DOUBLE PRECISION,POINTER:A,B(:,:) DOUBLE PRECISION,DIMENSION(5,10):TABLE1,TABLE2 REAL(DOUBLE),POINTER:A,B(:,:) REAL(DOUBLE),DIMENSIO

18、N(5,10):TABLE1,TABLE2【例7-7】 下面是各種形式的主要說(shuō)明數(shù)據(jù)屬性的聲明語(yǔ)句:REAL (KIND = high) testval REAL a(10), b(20,30) OPTIONAL testval SAVE a, b DOUBLE PRECISION TABLE1,TABLE2 DIMENSION TABLE1(5,10),TABLE2(5,10),B(:,:) POINTER A可以比較什么兩種表示方法,在說(shuō)明了同樣的意思的前提下,把屬性說(shuō)明附加在數(shù)據(jù)類(lèi)型說(shuō)明語(yǔ)句當(dāng)中,比每一種屬性單獨(dú)一個(gè)語(yǔ)句加以說(shuō)明要簡(jiǎn)潔自然得多。7.2.3 復(fù)型COMPLEX語(yǔ)句聲明了復(fù)型

19、數(shù)據(jù)對(duì)象的名稱(chēng),同時(shí)也可以附加種別參數(shù)以及其他屬性。如果給出種別選擇符,即說(shuō)明該復(fù)型數(shù)據(jù)的表示方法。說(shuō)明復(fù)型數(shù)據(jù)類(lèi)型的句法為:COMPLEX (KIND = kind-value ) , attribute-list : entry-list【例7-8】 下面是各種形式的復(fù)型數(shù)據(jù)對(duì)象聲明語(yǔ)句:COMPLEX chCOMPLEX (KIND=4),PRIVATE : zz, yy !等價(jià)于COMPLEX*8 zz, yyCOMPLEX(8) ax, by ! 等價(jià)于COMPLEX*16 ax, byCOMPLEX (kind(4) y(10)complex (kind=8) x, z(10)7.

20、2.4 邏輯型LOGICA語(yǔ)句聲明了邏輯型數(shù)據(jù)對(duì)象的名稱(chēng),同時(shí)也可以附加種別參數(shù)以及其他屬性。如果給出種別選擇符,即說(shuō)明該邏輯型數(shù)據(jù)的表示方法。說(shuō)明邏輯型數(shù)據(jù)類(lèi)型的句法為:LOGICAL (KIND = kind-value ) , attribute-list : entry-list【例7-9】 下面是各種形式的主要說(shuō)明邏輯型對(duì)象的聲明語(yǔ)句:LOGICAL, ALLOCATABLE : flag1, flag2LOGICAL (KIND = byte), SAVE : doit, dont【例7-10】 下面是各種形式的主要說(shuō)明對(duì)象的屬性的聲明語(yǔ)句:LOGICAL flag1, flag2

21、LOGICAL (KIND = byte) doit, dontALLOCATABLE flag1, flag2SAVE doit, dont7.2.5 字符型CHARACTER語(yǔ)句聲明了字符型數(shù)據(jù)對(duì)象的名稱(chēng),同時(shí)也可以附加種別參數(shù)以及其他屬性。如果給出字符選擇符,即說(shuō)明該字符型數(shù)據(jù)的最大字符長(zhǎng)度。說(shuō)明字符型數(shù)據(jù)類(lèi)型的句法為:CHARACTER character-selector , attribute-list : entry-list其中的字符選擇符(character-selector)的句法形式(R507)可以為如下幾種:length-selector(LEN =length-val

22、ue , KIND = kind-value )(length-value , KIND = kind-value )(KIND = kind-value ,LEN =length-value )其中長(zhǎng)度選擇符(length-selector)的句法形式(R508)可以是: (LEN = length-value) * character-length ,其中字符長(zhǎng)度(LEN)(R509)可以是: (length-value) scalar-integer-literal-constant其中長(zhǎng)度值(length-value)(R510)可以是: specification-expressio

23、n *在上面的類(lèi)型說(shuō)明當(dāng)中,使用星號(hào)*來(lái)標(biāo)志字符長(zhǎng)度的方式屬于過(guò)時(shí)的方式,不過(guò)不是指在數(shù)據(jù)項(xiàng)里面使用的星號(hào)*。字符型數(shù)據(jù)對(duì)象類(lèi)型聲明語(yǔ)句的一般規(guī)則如下: 只有在沒(méi)有使用雙冒號(hào)的情況下,在長(zhǎng)度選擇符里才可以使用逗號(hào)。 字符型數(shù)據(jù)對(duì)象的字符長(zhǎng)度在一定的情形下,是可以發(fā)生動(dòng)態(tài)變化的,即當(dāng)一個(gè)字符型數(shù)據(jù)的聲明語(yǔ)句出現(xiàn)在一個(gè)過(guò)程或者是過(guò)程界面當(dāng)中,同時(shí)該數(shù)據(jù)對(duì)象又不是某個(gè)派生數(shù)據(jù)對(duì)象的成員,那么它的字符長(zhǎng)度可以使用非常量表達(dá)式,該表達(dá)式的具體取值只有當(dāng)訪問(wèn)該過(guò)程時(shí)才被確定,并且當(dāng)該過(guò)程的運(yùn)行時(shí),表達(dá)式里變量的變化并不影響字符長(zhǎng)度值。這樣一種數(shù)據(jù)對(duì)象如果不屬于啞元,則屬于自動(dòng)數(shù)據(jù)對(duì)象的范疇。 字符長(zhǎng)度的說(shuō)

24、明有三種情形: 首先在數(shù)據(jù)項(xiàng)或數(shù)據(jù)項(xiàng)列的成員里給出字符長(zhǎng)度; 如果沒(méi)有上面的長(zhǎng)度說(shuō)明,則在數(shù)據(jù)類(lèi)型說(shuō)明部分給出命名字符數(shù)據(jù)項(xiàng)或派生類(lèi)型定義當(dāng)中的字符成員的字符選擇符,用來(lái)給出長(zhǎng)度屬性; 如果一個(gè)字符型數(shù)據(jù)既沒(méi)有使用字符選擇符,也沒(méi)有使用字符長(zhǎng)度來(lái)說(shuō)明其長(zhǎng)度,那么默認(rèn)的字符長(zhǎng)度為1。 如果長(zhǎng)度參數(shù)取負(fù)值,那么相應(yīng)的字符項(xiàng)長(zhǎng)度為0。 給定了字符長(zhǎng)度的標(biāo)量整型文字常量不能再附加任何種別參數(shù),否則在固定源碼形式里面就會(huì)導(dǎo)致歧義。 采用帶星號(hào)*的長(zhǎng)度說(shuō)明只能使用于以下幾種情形:可以應(yīng)用于過(guò)程的啞元,當(dāng)過(guò)程被調(diào)用時(shí),啞元就被賦予相應(yīng)實(shí)元的長(zhǎng)度;可以用于聲明命名常量,這時(shí)它的長(zhǎng)度是一個(gè)常量值;可以用于聲明一

25、個(gè)外部函數(shù)的結(jié)果變量的長(zhǎng)度。任何調(diào)用該函數(shù)的作用域單元如果使用帶星號(hào)的長(zhǎng)度說(shuō)明,就意味著主程序可以訪問(wèn)該聲明。當(dāng)函數(shù)被調(diào)用的時(shí)候,結(jié)果變量的長(zhǎng)度的取值由引用該函數(shù)的程序單元里面的相應(yīng)聲明語(yǔ)句決定。本規(guī)則暗示了在IMPLICIT語(yǔ)句當(dāng)中不能使用帶星號(hào)*的長(zhǎng)度說(shuō)明方式。 如果一個(gè)函數(shù)屬于內(nèi)部函數(shù)或模塊函數(shù),或者該函數(shù)的值為數(shù)組,指針或遞歸形式,那么該函數(shù)名不能使用帶星號(hào)*的長(zhǎng)度聲明。 字符值語(yǔ)句函數(shù)或字符型語(yǔ)句函數(shù)啞元的長(zhǎng)度必須是整型常量表達(dá)式?!纠?-11】 下面是各種形式的主要說(shuō)明字符型數(shù)據(jù)對(duì)象的聲明語(yǔ)句:CHARACTER (LEN=25,KIND=GREEK),DIMENSION(11):

26、Z1CHARACTER (LEN=20,KIND=KANJI),SAVE:GREETING(2)CHARACTER (10):QUESTION=“WHERE?”CHARACTER (LEN=*,KIND=CHINESE),PARAMETER:MESSAGE = &“簡(jiǎn)樸是語(yǔ)言的一種美德”CHARACTER (*),INTENT(IN):SCHOOL, HOMECHARACTER *3, SAVE : COMPONENT_1, LONGER(9) *20, COMPONENT_2CHARACTER : RESULT = “PASS”例7-12:下面是各種形式的主要說(shuō)明字符型數(shù)據(jù)的屬性的聲明語(yǔ)句:

27、CHARACTER (70)PROJECTCHARACTER (LEN=30, KIND=GERMAN)TRANSFORMATIONCHARACTER (LEN=25,KIND=GREEK)Z1CHARACTER (LEN=20,KIND=KANJI)GREETING(2)CHARACTER (10)QUESTIONCHARACTER (*)SCHOOL, HOMECHARACTER *3 COMPONENT_1, LONGER(9) *20, COMPONENT_2CHARACTER RESULT SAVE GREETING(2)INTENT(IN)SCHOOL, HOMEDATA QUES

28、TION /“WHERE?”/CHARACTER (*)MESSAGEPARAMETER( MESSAGE = & “簡(jiǎn)樸是語(yǔ)言的一種美德”)7.2.6 派生類(lèi)型TYPE語(yǔ)句聲明了用戶(hù)派生數(shù)據(jù)類(lèi)型對(duì)象的名稱(chēng),派生類(lèi)型的名稱(chēng)寫(xiě)在緊跟TYPE后面的一對(duì)括號(hào)當(dāng)中,聲明派生類(lèi)型的數(shù)據(jù)對(duì)象的一般句法為:TYPE(type-name) , attribute-list : entry-list派生類(lèi)型聲明語(yǔ)句的一般規(guī)則如下: 如果一個(gè)派生類(lèi)型對(duì)象是私有的話(huà),就不能附加PUBLIC屬性。 結(jié)構(gòu)構(gòu)造器必須用來(lái)初始化派生類(lèi)型數(shù)據(jù)對(duì)象,結(jié)構(gòu)構(gòu)造器里的表達(dá)式必須是初始化表達(dá)式。 如果需要聲明的派生數(shù)據(jù)對(duì)象是一個(gè)函數(shù)

29、的結(jié)果,那么它就可以在FUNCTION語(yǔ)句當(dāng)中予以說(shuō)明。【例7-13】 下面是各種形式的主要說(shuō)明派生數(shù)據(jù)對(duì)象的聲明語(yǔ)句: TYPE(SAMPLE),DIMENSION( :),ALLOCATABLE:STOVE TYPE(STUDENT),SAVE:GRAD(5) TYPE(HOMEWORK),SAVE:QUESTION,TAPE,WORD_SHEET【例7-14】 下面是各種形式的主要說(shuō)明派生數(shù)據(jù)對(duì)象的屬性的聲明語(yǔ)句: TYPE(SAMPLE)STOVE TYPE(STUDENT)GRAD(5) TYPE(HOMEWORK)QUESTION,TAPE,WORD_SHEET DIMENSION

30、 STOVE( :)ALLOCATABLE STOVE SAVE GRAD(5), QUESTION,TAPE,WORD_SHEET注意上面這兩種說(shuō)明方法里面標(biāo)點(diǎn)的不同用法。7.3 隱式類(lèi)型描述法 當(dāng)初FORTRAN使用隱式類(lèi)型聲明方法,是與語(yǔ)言的簡(jiǎn)樸形態(tài)相適應(yīng)的,在硬件資源相對(duì)緊缺的時(shí)代,簡(jiǎn)樸也能成為語(yǔ)言的一種美德,不過(guò)如果到了硬件資源相對(duì)富余的今天,還吝嗇于增加幾個(gè)關(guān)鍵詞和幾條聲明語(yǔ)句,就會(huì)顯得很落伍了,所以后來(lái)就增加了更為接近自然語(yǔ)言的聲明語(yǔ)句,不過(guò),為了緬懷FORTRAN語(yǔ)言作為祖母級(jí)高級(jí)語(yǔ)言的榮耀,隱式類(lèi)型聲明方式還是保留下來(lái)了,甚至默認(rèn)為總是起作用,除非首先聲明了IMPLICIT

31、NONE語(yǔ)句。當(dāng)然,只要你樂(lè)意使用,這種類(lèi)型聲明方式在某些情況下,還是非常方便簡(jiǎn)明的。隱式類(lèi)型聲明方法的出發(fā)點(diǎn),是考慮到任何需要加以類(lèi)型聲明的對(duì)象,如變量,命名常量,函數(shù)等,都需要一個(gè)名稱(chēng)來(lái)指稱(chēng),那么就可以把它的類(lèi)型這個(gè)信息負(fù)載在它的名稱(chēng)上,最簡(jiǎn)單的約定,就是讓名稱(chēng)的第一個(gè)字母來(lái)標(biāo)記它的類(lèi)型,例如在默認(rèn)的情形下:REAL: A B C D E F G H INTEGER: I J K L M NREAL: O P Q R S T U V W X Y Z可以發(fā)現(xiàn),上面對(duì)字母的默認(rèn)分配并不是很難記憶,F(xiàn)ORTRAN沿用了數(shù)學(xué)里的很多習(xí)慣,這里使用I,J,K,L,M,N來(lái)表述整數(shù),就是一個(gè)明顯的數(shù)學(xué)

32、習(xí)慣。除了上面默認(rèn)的首字母隱式類(lèi)型法則,隱式類(lèi)型聲明方法還有很靈活的一面,即利用IMPLICIT語(yǔ)句來(lái)自定義字母分配模式,一般的IMPLICIT語(yǔ)句的句法形式(R541)有2種,分別行使不同的功能: IMPLICIT type-specification(letter-specification-list) IMPLICIT NONE其中的字母分配說(shuō)明列表的句法形式(R543)為: letter-letter這里IMPLICIT后面的字母分配表定義可以完全是自由定義,并且只是在該語(yǔ)句的作用域內(nèi)有效,而任何名稱(chēng)在它的作用域內(nèi)只要是沒(méi)有專(zhuān)門(mén)的類(lèi)型聲明語(yǔ)句,也沒(méi)有IMPLICIT語(yǔ)句,那么它就遵循上

33、面的默認(rèn)首字母隱式類(lèi)型法則。隱式類(lèi)型的一般規(guī)則如下: 如果要使用IMPLICIT NONE語(yǔ)句,那么它必須放置在任何PARAMETER語(yǔ)句之前,并且在其作用域內(nèi),再也不能出現(xiàn)其他IMPLICIT語(yǔ)句。 IMPLICIT語(yǔ)句當(dāng)中出現(xiàn)的表述字母范圍的letter-letter,左邊的字母絕對(duì)不能是右邊字母的按照字母表順序的后面的字母。 letter-letter的字母之間為減號(hào),而非下劃線,表示按照字母表順序從左邊字母到右邊字母的所有字母。 在一個(gè)作用域里面的IMPLICIT語(yǔ)句里面,同一個(gè)字母不能出現(xiàn)在字母分配說(shuō)明列表里面的不同項(xiàng)里,例如作為單個(gè)字母出現(xiàn)了,又同時(shí)處于另一個(gè)字母范圍之中,或同時(shí)處

34、于2個(gè)不同的字母范圍里面。 IMPLICIT語(yǔ)句同樣可以用來(lái)為派生數(shù)據(jù)類(lèi)型分配首字母作為類(lèi)型標(biāo)記。默認(rèn)的首字母隱式類(lèi)型法則與IMPLICIT語(yǔ)句之間的關(guān)系值得特別加以注意。例如給出約定:IMPLICIT COMPLEX(E-G,W-Z)然后在該語(yǔ)句的作用域里再也沒(méi)有其他IMPLICIT語(yǔ)句,也沒(méi)有類(lèi)型聲明語(yǔ)句,那么在該作用域內(nèi)具有不屬于(E-G,W-Z)這個(gè)范圍的首字母的變量,將遵循默認(rèn)首字母分配表,即首字母在范圍(A-D,H,O-V)內(nèi)的變量屬于實(shí)型,而首字母在范圍(I-N)內(nèi)的變量屬于整型。IMPLICIT NONE可以用來(lái)檢查名稱(chēng)的錯(cuò)誤拼寫(xiě),因?yàn)槿绻患右赃@個(gè)語(yǔ)句的話(huà),即使錯(cuò)誤拼寫(xiě)的名稱(chēng)

35、,也會(huì)被看成遵循首字母隱式類(lèi)型聲明方法的具有確定數(shù)據(jù)類(lèi)型的變量,從而能夠通過(guò)語(yǔ)法檢查,反之使用該語(yǔ)句,就可以避免這種誤解?!纠?-15】 下面的IMPLICIT語(yǔ)句都是合法語(yǔ)句: IMPLICIT CHARACTER*30(B,T),COMPLEX(W-Z) IMPLICIT LOGICAL(KIND=BIT)(Q) IMPLICIT REAL(QUAD)(X-Z) IMPLICIT TYPE(NUMBER)(A-E) IMPLICIT TYPE(ARTICAL)(A,V),CHARACTER*100(B)【例7-16】 下面的IMPLICIT語(yǔ)句都是非法語(yǔ)句:IMPLICIT CHARACT

36、ER*30(B,T),COMPLEX(Z -W)!W應(yīng)該放置在Z 之!前。 IMPLICIT LOGICAL(KIND=BIT)(Q),REAL(QUAD)(P-T)!Q同時(shí)表!示2種類(lèi)型。 IMPLICIT TYPE(ARTICAL)(A-H),CHARACTER*100(B,Q)!B同時(shí)表!示2種類(lèi)型。使用隱式類(lèi)型聲明在一個(gè)嵌套作用域里面所導(dǎo)致的變量作用域混亂問(wèn)題在有關(guān)作用域之間通訊時(shí)再討論。7.4 數(shù)組屬性數(shù)組的概念來(lái)源于數(shù)學(xué)的向量概念,最大的特點(diǎn)就是數(shù)組的各個(gè)分量必須是同一種數(shù)據(jù)類(lèi)型,同樣的種別參數(shù),具有同樣的屬性,因此數(shù)組本身作為一個(gè)數(shù)據(jù)對(duì)象,最主要的屬性就只剩下它的維度,也就是它的

37、秩。作為一個(gè)變量的數(shù)組可以有多種形式,除了它的分量可以發(fā)生變化之外,它的維度也可以發(fā)生變化,有3種情形需要數(shù)組的維度不予固定: 在程序運(yùn)行當(dāng)中,數(shù)組所占據(jù)的存儲(chǔ)空間不是固定的,而是可重新分配的,這意味著該數(shù)組必定具有ALLOCATABLE屬性; 該數(shù)組被賦予指針的屬性,使得它的維度無(wú)法預(yù)先固定下來(lái); 該數(shù)組本身就是一個(gè)啞元,它的維度依賴(lài)于別的變量對(duì)它的賦值情況。因此數(shù)組本身形狀的說(shuō)明出現(xiàn)了4種形式,而數(shù)組所特有的屬性,主要就是DIMENSION和ALLOCATABLE,下面分小節(jié)予以說(shuō)明。7.3.1 數(shù)組描述的4種形式數(shù)組描述的4種形式的句法形式(R513)為:explicit-shape-s

38、pecification-listdeferred-shape-specification-listassumed- shape-specification-listassumed-size-specification這四種形式分別用來(lái)描述數(shù)組在程序當(dāng)中出現(xiàn)的四種可能情形: 首先是最基本的顯形數(shù)組(explicit-shape arrays),即在定義數(shù)組的時(shí)候就已經(jīng)給出它的形狀; 當(dāng)一個(gè)數(shù)組具有指針屬性,或具有可分配屬性時(shí),它的形狀就沒(méi)法預(yù)先給定,需要在程序運(yùn)行過(guò)程當(dāng)中通過(guò)指針或分配過(guò)程予以確定,這時(shí)就需要使用待定形數(shù)組(deferred-shape arrays)的形式來(lái)加以描述; 當(dāng)數(shù)組

39、本身屬于啞元時(shí),它的形狀就需要實(shí)元來(lái)賦予,這樣就需要使用啞形數(shù)組(assumed- shape arrays)的形式來(lái)加以描述; 如果實(shí)元賦予一個(gè)作為啞元的數(shù)組時(shí),只是決定它的尺度,而沒(méi)有給定其他形狀要素,那么就需要使用啞尺度數(shù)組(assumed-size arrays)的形式來(lái)加以描述。下面我們將分節(jié)說(shuō)明這四種數(shù)組的描述方式。數(shù)組的描述的一般規(guī)則如下: 按照FORTRAN標(biāo)準(zhǔn),數(shù)組的秩至少可以達(dá)到7,盡管一般應(yīng)用環(huán)境里,秩為2或3是最常見(jiàn)的,但是對(duì)于一些特定的計(jì)算問(wèn)題,可能需要用到非常高的維度的數(shù)組,所以一般的FORTRAN編譯器都能支持遠(yuǎn)大于7的秩。 一個(gè)標(biāo)量的秩為0。 待定形數(shù)組必定或者

40、具有POINTER的屬性,或者具有ALLOCATABLE的屬性。 啞形數(shù)組和啞尺度數(shù)組必定屬于啞元。 必須注意待定形數(shù)組和啞形數(shù)組的表示形式可能出現(xiàn)雷同的時(shí)候,即都是使用一個(gè)冒號(hào)表示。7.3.2 顯形數(shù)組顧名思義,所謂顯形數(shù)組就是對(duì)于數(shù)組的每一個(gè)維度都給出了具體的上下界,每個(gè)維度的顯形說(shuō)明的句法形式(R514)如下: low-bound : upper-bound其中的上界(upper-bound)和下界(low-bound)為說(shuō)明表達(dá)式。參見(jiàn)表達(dá)式。顯形數(shù)組的一般規(guī)則如下: 顯形數(shù)組的說(shuō)明列表里所給出的上下界對(duì)的數(shù)目必須與該數(shù)組的維度數(shù)目一致。 如果下界被省略了,則表明取默認(rèn)值1。 上下界可

41、以是正整數(shù),也可以是負(fù)整數(shù),還可以是0。 數(shù)組的下標(biāo)范圍就是在上下界之間,包括上下界本身的所有整數(shù)集合,并且上界不能小于下界,如果出現(xiàn)這種情況,表明下標(biāo)范圍為空集,或者說(shuō)其相應(yīng)維度的寬度為0,而且數(shù)組的尺度也為0。 如果上下界是以表達(dá)式的形式出現(xiàn),那么可能包含變量,使得上下界的具體取值在數(shù)組所處的過(guò)程運(yùn)行當(dāng)中發(fā)生變化,這時(shí),該數(shù)組必定是一個(gè)啞元,或者是一個(gè)函數(shù)結(jié)果,或者是一個(gè)動(dòng)態(tài)數(shù)組?!纠?-17】 下面是主要說(shuō)明數(shù)據(jù)項(xiàng)的聲明語(yǔ)句: INTEGER X(20:30,5,-10:40) . SUBROUTINE AAA(I,J,K) REAL,DIMENSION(10:I+2,J):K .【例7

42、-18】 下面是主要說(shuō)明屬性的聲明語(yǔ)句: INTEGER X(20:30,5,-10:40) . SUBROUTINE AAA(I,J,K) REAL KDIMENSION K(10:I+2,J) .7.3.3 待定形數(shù)組待定形數(shù)組用來(lái)表示具有指針屬性和可分配屬性的數(shù)組。 對(duì)于指針數(shù)組來(lái)說(shuō),數(shù)組的每個(gè)維度的寬度是在指針被分配或指針賦值語(yǔ)句被執(zhí)行之后才給定的; 對(duì)于可分配數(shù)組來(lái)說(shuō),它的上下界只是在被分配之后才給出。因此對(duì)于這種數(shù)組的形狀說(shuō)明,只能使用一個(gè)冒號(hào),即如下的句法形式(R518): : 待定形數(shù)組的一般規(guī)則如下: 待定形數(shù)組的秩等于它的說(shuō)明列表當(dāng)中出現(xiàn)的冒號(hào)的數(shù)目。 當(dāng)待定形數(shù)組完成存儲(chǔ)

43、分配之后,它的上下界在ALLOCATE語(yǔ)句當(dāng)中被確定。 對(duì)一個(gè)指針數(shù)組的目標(biāo)數(shù)組的每個(gè)維度執(zhí)行固有函數(shù)LBOUND,就能得到指針數(shù)組的相應(yīng)維度的下界;同樣的,對(duì)一個(gè)指針數(shù)組的目標(biāo)數(shù)組的每個(gè)維度執(zhí)行固有函數(shù)UBOUND,就能得到指針數(shù)組的相應(yīng)維度的上界。因此, 如果上下界是由指針的分配決定,那么該數(shù)組的形狀就可以由用戶(hù)來(lái)指定; 如果上下界是由指針的賦值決定,那么該數(shù)組的形狀就可以有二種情形: 如果指針目標(biāo)是一個(gè)命名全數(shù)組,那么上下界就由該數(shù)組的聲明決定,或者在該數(shù)組被分配之后給出; 如果指針目標(biāo)是一個(gè)數(shù)組片斷,那么它的下界為1,而上界為所處維度的寬度。 如果指針數(shù)組或可分配的上下界里面包含變量,

44、那么當(dāng)變量在隨后有了重定義與去定義的情形的話(huà),上下界不受這種變化的影響?!纠?-19】 下面是主要說(shuō)明數(shù)據(jù)項(xiàng)的聲明語(yǔ)句: REAL,POINTER:A( : , : ),B( : , : ) REAL,ALLOCATABLE:A( : , : )【例7-20】 下面是主要說(shuō)明屬性的聲明語(yǔ)句: REAL A( : , : ),B( : , : ) POINTER A,BALLOCATABLE A7.3.4 啞形數(shù)組所謂啞形數(shù)組,就是一個(gè)啞元,它的形狀只有在與一個(gè)實(shí)元相結(jié)合時(shí)才能定下來(lái),啞形數(shù)組的說(shuō)明句法(R517)為: low-bound :即只是可選地給出一個(gè)下界,然后就是一個(gè)冒號(hào),下界闕如,

45、表示未定。啞形數(shù)組的一般規(guī)則如下: 啞形數(shù)組的說(shuō)明列表當(dāng)中出現(xiàn)的冒號(hào)的個(gè)數(shù),就等于該數(shù)組的秩。 下界或者明確給出,或者省略,表示下界取默認(rèn)值1。 上界等于數(shù)組在相應(yīng)維度上的寬度加下界值減1。 啞形數(shù)組不能具有POINTER或ALLOCATABLE這二種屬性。 未結(jié)合指針數(shù)組的尺度,界和形狀都是未定義的,這樣一個(gè)數(shù)組的任何部分都不能被引用或定義,不過(guò)這樣的數(shù)組可以作為固有查詢(xún)函數(shù)的變量出現(xiàn),從而可以查詢(xún)變量狀態(tài),數(shù)據(jù)類(lèi)型性質(zhì),類(lèi)型參數(shù),或者結(jié)合狀態(tài)?!纠?-21】 下面是主要說(shuō)明數(shù)據(jù)項(xiàng)的聲明語(yǔ)句: SUBROUTING AAA(X,Y,Z) REAL,DIMENSION(5:,:):A REAL

46、,INTENT(IN):X( :),Y(5:)【例7-22】 下面是主要說(shuō)明屬性的聲明語(yǔ)句: SUBROUTING AAA(X,Y,Z) REAL X( :),Y(5:),ZDIMENSION A(5:,:) INTENT(IN)X,Y .7.3.5 啞尺度數(shù)組一個(gè)啞尺度數(shù)組就是一個(gè)啞元,而它的尺度由與它相關(guān)聯(lián)的實(shí)元設(shè)定,因此在聲明啞尺度數(shù)組時(shí),就給定了它的尺度,即秩,寬度和界(最后一個(gè)維度的上界和寬度除外)。對(duì)于啞尺度數(shù)組和實(shí)元之間的關(guān)聯(lián)有如下規(guī)則: 二者具有相同的初始數(shù)組元素。 后繼數(shù)組元素是按照存儲(chǔ)順序排列的。 啞元的聲明就需要給出數(shù)組的秩,所有維度的下界,以及除了最后一個(gè)維度之外的所有

47、的上界與寬度。 實(shí)元的尺度啞元的尺度。啞尺度數(shù)組的最后一個(gè)維度的上界不能給出,因此使用星號(hào)(*)表示。啞尺度數(shù)組的句法形式(R519)為: explicit-shape-list, low-bound: *可見(jiàn),啞尺度數(shù)組與顯形數(shù)組在形式上的主要差別就是最后一個(gè)維度的上界有待給出。啞尺度數(shù)組的一般規(guī)則如下: 啞尺度數(shù)組的秩就是它的顯形數(shù)組的說(shuō)明列表當(dāng)中的說(shuō)明數(shù)目加1。 啞尺度數(shù)組的尺度根據(jù)以下途徑來(lái)決定: 如果與啞元相關(guān)聯(lián)的實(shí)元是非默認(rèn)字符類(lèi)型的任意其他類(lèi)型數(shù)組,那么啞元的尺度就是實(shí)元的尺度。 如果與啞元相關(guān)聯(lián)的實(shí)元是非默認(rèn)字符類(lèi)型的任意其他類(lèi)型數(shù)組元素,并且它的下標(biāo)順序值是一個(gè)尺度為x的數(shù)組

48、當(dāng)中的v,那么該啞元的尺度為x-v+1。 如果與啞元相關(guān)聯(lián)的實(shí)元屬于默認(rèn)字符類(lèi)型數(shù)組,或者屬于默認(rèn)字符型數(shù)組元,或者屬于默認(rèn)字符型數(shù)組元素子串,假設(shè)它開(kāi)始于一個(gè)以c作為字符存儲(chǔ)單位的數(shù)組的第t個(gè)字符存儲(chǔ)單位,那么啞元的尺度為:MAX(INT(c-t+1)/e),0)其中e是啞字符數(shù)組里的元素的長(zhǎng)度。 設(shè)數(shù)組的秩為r,那么前r-1維的界都由相應(yīng)的顯形數(shù)組說(shuō)明給定,最后一個(gè)維度的下界則由聲明中給出的下界給定,如果沒(méi)有給出,則取默認(rèn)值1。 如果界的表達(dá)式里面包含變量,那么當(dāng)相應(yīng)過(guò)程執(zhí)行時(shí),就會(huì)導(dǎo)致表達(dá)式取值發(fā)變化,但是當(dāng)變量在隨后如果是有了重定義與去定義的情形的話(huà),上下界則不受這種變化的影響。 函數(shù)

49、結(jié)果不能成為啞尺度數(shù)組。 除了以下兩種情形,啞尺度數(shù)組不能作為全數(shù)組引用: 在過(guò)程引用當(dāng)中沒(méi)有要求實(shí)元的形狀; 引用到固有函數(shù)LBOUND?!纠?-23】 下面是主要說(shuō)明數(shù)據(jù)項(xiàng)的聲明語(yǔ)句: SUBROUTING PRO(A,B,C) REAL,DIMENSION(A,*):B REAL C(100,20,*) .【例7-24】 下面是主要說(shuō)明屬性的聲明語(yǔ)句: SUBROUTING PRO(A,B,C) REAL B, C(100,20,*) DIMENSION B(A,*): .7.3.6 數(shù)組的四種聲明形式的兼容性數(shù)組的四種聲明形式可以在程序里扮演的腳色有各種限制,也就是說(shuō)具有不同的語(yǔ)法作用

50、。下面的表7-2給出這四種形式與不同語(yǔ)法單位的兼容性限制:表7-2數(shù)組的四種聲明形式的兼容性數(shù)組聲明的形式數(shù)組的語(yǔ)法單位顯形數(shù)組待定形數(shù)組啞形數(shù)組啞尺度數(shù)組表達(dá)式的主項(xiàng)可可可否下標(biāo)向量可可可否啞元可可可可實(shí)元可可可可等價(jià)對(duì)象可否否否公用對(duì)象可可否否名稱(chēng)列表對(duì)象可否否否保留對(duì)象可可否否初始化數(shù)據(jù)對(duì)象可否否否I/O列表項(xiàng)可可可否格式可可可否內(nèi)部文件可可可否分配對(duì)象否可否否指針賦值語(yǔ)句里的指針對(duì)象否可否否指針賦值語(yǔ)句里的目標(biāo)對(duì)象可可可否 7.3.7 DIMENSION屬性和DIMENSION語(yǔ)句數(shù)組的維度除了可以在數(shù)組聲明語(yǔ)句當(dāng)中,通過(guò)數(shù)組名稱(chēng)的說(shuō)明來(lái)給出之外,還可以使用DIMENSION屬性語(yǔ)句來(lái)

51、給出,實(shí)際上,DIMENSION語(yǔ)句屬于FORTRAN早期標(biāo)準(zhǔn)的遺留物,現(xiàn)在既可作為單獨(dú)的屬性語(yǔ)句出現(xiàn),也可以附加在數(shù)據(jù)聲明語(yǔ)句里面。附加DIMENSION屬性的數(shù)據(jù)類(lèi)型聲明語(yǔ)句的句法形式為: type-specification,DIMENSION(array-specification) ,attribute-list:& entity-list可以跟在DIMENSION屬性語(yǔ)句后面的其他屬性有: initialization ALLOCATABLE INTENT OPTIONAL PARAMETER POINTER PRIVATE PUBLIC SAVE TARGET另外,數(shù)組說(shuō)明可以使

52、用一個(gè)數(shù)組名稱(chēng),然后后面附加其他語(yǔ)句來(lái)聲明一個(gè)數(shù)組,這些語(yǔ)句可以是DIMENSION語(yǔ)句,類(lèi)型聲明,ALLOCATABLE,POINTER,TARGET,COMMON等語(yǔ)句。如果以說(shuō)明DIMENSION屬性為主給出數(shù)組定義,那么可以采用如下的句法形式(R526): DIMENSION : array-name(array-specification)& ,array-name(array-specification) 【例7-25】 下面是主要說(shuō)明數(shù)據(jù)項(xiàng)的聲明語(yǔ)句: REAL,ALLOCATABLE,TARGET:X( :,:) REAL,DIMENSION(30),TARGET,SAVE:M

53、ETER【例7-26】 下面是主要說(shuō)明屬性的聲明語(yǔ)句: REAL X( :,:),METER DIMENSION METER(30) TARGET X,METERALLOCATABLE XSAVE METER【例7-27】 下面是在其他聲明語(yǔ)句當(dāng)中使用數(shù)組說(shuō)明的例子: REAL X,METER TARGET X,METER(30)ALLOCATABLE X( :,:)SAVE METER【例7-28】 下面是在COMMON語(yǔ)句當(dāng)中使用數(shù)組說(shuō)明的例子: COMMON / MOTION / TIME(30),SPACE(1000,1000,1000)7.3.8 ALLOCATABLE屬性和ALLO

54、CATABLE語(yǔ)句一個(gè)數(shù)組可分配是指它的界只有在執(zhí)行ALLOCATE語(yǔ)句之后才能確定。這樣一個(gè)數(shù)組必定是一個(gè)待定形數(shù)組。ALLOCATABLE屬性只是針對(duì)數(shù)組而言才成立。一個(gè)具有ALLOCATABLE屬性的數(shù)組的類(lèi)型聲明的句法形式為:type-specification,ALLOCATABLE ,attribute-list:entity-list能與ALLOCATABLE兼容的屬性有:DIMENSION(deferred-shape- specification-list)PRIVATEPUBLICSAVETARGET單獨(dú)的ALLOCATABLE屬性語(yǔ)句的句法形式(R527)為: ALLOC

55、ATABLE: array-name (deferred-shape- specification-list)& ,array-name (deferred-shape- specification-list) ALLOCATABLE屬性聲明的一般規(guī)則如下: 具有ALLOCATABLE屬性的數(shù)組就不能是啞元或函數(shù)結(jié)果。 如果給定具有ALLOCATABLE屬性的數(shù)組,再在任何位置給出具有DIMENSION屬性,都必須使用單獨(dú)的冒號(hào)來(lái)表示為待定形數(shù)組?!纠?-29】 下面是主要說(shuō)明數(shù)據(jù)項(xiàng)的例子: REAL,ALLOCATABLE,SAVE:X(:,:) INTEGER,ALLOCATABLE,DI

56、MENSION(:):Y【例7-30】 下面是主要說(shuō)明屬性的例子: REAL X(:,:) INTEGER YDIMENSION Y(:)ALLOCATABLE X,YSAVE X7.4 指針屬性一般說(shuō)來(lái),我們給一個(gè)數(shù)據(jù)對(duì)象附加一種屬性,總是意味著給該數(shù)據(jù)對(duì)象增加某種它本來(lái)沒(méi)有的性質(zhì),但是指針(POINTER)屬性則不然,當(dāng)我們把POINTER屬性附加給某個(gè)數(shù)據(jù)對(duì)象,實(shí)際上是把該數(shù)據(jù)對(duì)象本來(lái)具有的存儲(chǔ)空間給拿掉了。由于我們要引用一個(gè)數(shù)據(jù)對(duì)象,前提必然是已經(jīng)確定了該數(shù)據(jù)對(duì)象的存儲(chǔ)空間,才能準(zhǔn)確地加以訪問(wèn),那么顯然,對(duì)于一個(gè)具有POINTER屬性的數(shù)據(jù)對(duì)象,既然它不具有了初始的存儲(chǔ)空間,也就無(wú)法加

57、以引用,除非再給該數(shù)據(jù)對(duì)象關(guān)聯(lián)上一個(gè)存儲(chǔ)空間。給POINTER對(duì)象關(guān)聯(lián)到一個(gè)存儲(chǔ)空間,可以通過(guò)如下方法: 使用ALLOCATE語(yǔ)句為POINTER對(duì)象創(chuàng)造一個(gè)新的存儲(chǔ)空間; 使用指針賦值語(yǔ)句使得POINTER對(duì)象從另外一個(gè)具有存儲(chǔ)空間的數(shù)據(jù)對(duì)象那里借用其存儲(chǔ)空間,那個(gè)被借用存儲(chǔ)空間的數(shù)據(jù)對(duì)象稱(chēng)為指針的目標(biāo)。目標(biāo)數(shù)據(jù)對(duì)象在程序運(yùn)行時(shí)是可以發(fā)生變化的,它有兩種來(lái)源: 賦予了TARGET屬性的數(shù)據(jù)對(duì)象,或者它的某個(gè)部分; 指針通過(guò)分配而創(chuàng)造出來(lái)的新的數(shù)據(jù)對(duì)象,或者它的某個(gè)部分。指針可以被關(guān)聯(lián)到另外一個(gè)指針的目標(biāo),或者目標(biāo)的某個(gè)部分。對(duì)于一個(gè)數(shù)組來(lái)說(shuō),要使得它成為某個(gè)指針的目標(biāo),除了具有ALLOCAT

58、ABLE屬性之外,還必須具有TARGET屬性。在一個(gè)程序里,最初建立一個(gè)指針對(duì)象之后,還必須對(duì)它進(jìn)行初始化,也就是定義它的初始狀態(tài)(參見(jiàn)7.5),然后才可以使用固有函數(shù)ASSOCIATED來(lái)查詢(xún)指針的狀態(tài),否則,該指針既不能被引用,也不能出現(xiàn)在DEALLOCATE語(yǔ)句當(dāng)中。所謂指針的經(jīng)過(guò)定義了的狀態(tài)有兩種:關(guān)聯(lián)與去關(guān)聯(lián)。 通過(guò)ALLOCATE與指針賦值語(yǔ)句,可以使得指針具有關(guān)聯(lián)狀態(tài); 通過(guò)DEALLOCATE或者NULLIFY語(yǔ)句,或者讓指針賦值給另外一個(gè)本來(lái)處于去關(guān)聯(lián)狀態(tài)的指針,可以使得指針具有去關(guān)聯(lián)狀態(tài)。一個(gè)指針無(wú)論是處于關(guān)聯(lián)狀態(tài)還是去關(guān)聯(lián)狀態(tài),總之是已經(jīng)被定義的狀態(tài),因此可以使用固有函數(shù)

59、ASSOCIATED來(lái)查詢(xún)它是否處于關(guān)聯(lián)狀態(tài)。實(shí)際上,對(duì)于指針我們還可以看成是一個(gè)描述符,這個(gè)描述符所占據(jù)的空間里存儲(chǔ)了有關(guān)它所指稱(chēng)的對(duì)象的數(shù)據(jù)類(lèi)型,種別參數(shù),秩,寬度,以及目標(biāo)的位置等這類(lèi)信息。因此一個(gè)實(shí)型標(biāo)量對(duì)象指針必然和一個(gè)派生類(lèi)型的數(shù)組指針具有完全不同的存儲(chǔ)空間單位,那么給出一個(gè)指針必然無(wú)法預(yù)先給定它的存儲(chǔ)單位,當(dāng)我們要在一個(gè)公用塊里聲明指針屬性的時(shí)候,就相當(dāng)于給出存儲(chǔ)的描述符,因此每當(dāng)我們聲明一個(gè)包含指針的公用塊時(shí),都必定指定相同的存儲(chǔ)單位序列。7.4.1 POINTER屬性和POINTER語(yǔ)句附加了POINTER屬性說(shuō)明的類(lèi)型聲明的句法形式為:type-specification,

60、POINTER ,attribute-list:entity-list可以與POINTER兼容的其他屬性包括: initializationDIMENSION(deferred-shape- specification-list) OPTIONAL PRIVATE PUBLIC SAVE單獨(dú)的POINTER語(yǔ)句也可以用來(lái)聲明一個(gè)指針對(duì)象,它的句法形式(R528)為: POINTER : object-name (deferred-shape- specification-list)& ,object-name (deferred-shape- specification-list) 指針聲明的

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論