Fortran95第7章-属性的声明.docx
第7章属性的声明最终,对于数据我们跑下的工作,就是如何运用FROTRAN语古来完整地加以描述.FoRTRAN语言完成而数据的描述的语法单位是数据声明语句,在前面2章里面,我们整理好问题当中须要涉及的数据及其结构之后,要以FORTRAN语言写下来,就是运用FoRTRAN的声明语句,这些谱句的旬法设计保证能峪完备的描述我们关于数据所须要说明的一切属性.数据对象首先须要予以说明的当然就是它的类鞭,因此我们首先给出对象的类型声明语句.特殊地.须要说明在最初FoRTRAN标准里面遗序下来的一种数据类型描述方法IS式类型描述法,然后探讨各种数抵对望所可能具有的M性. 数组属性: 指针属性: 值特征: 对思可访问性与运用属性: 特征兼容性; 自动数据对象: 存储关联.由于本章集中探讨FoRTRAN的声明语句,而声明的对象除了数据之外,其他的程序对象,例如函数,过程等也须要声明其类型或属性,因此本章一并探讳对其他程序对象的声明: 过程属性: NAMEUST语句:7.1 属性及其声明方式所谓一个对象的属性,就是程序运用该对象的方式。本垄所探讨的属性的大体分类与作为其名称的关键诃见表7-1:表7-1量性的分类及其关一词数IK类中INTEGERREAU以及DoUB1.EPRECISION)COMP1.EXUXiICA1.CHARAERTYPE(派生类量的名移由用户命名)致mM性DlMENSIONA1.1.OCATAB1.E括竹M性POINTERTARGET故设?IDATAPARAMETER对象可访问性,溜用PUB1.ICPRIVATEINTENTOPTIONA1.SAVE过程“性EXTERNA1.INTRINSlC对象关系屉件NAME1.lsrEQUIVA1.ENCECOMMONSAVEXCOMPi-EXX<35)SAVEXCOMP1.EX.D1MENSION(35).SAVE三1XC0MP1.fX.SAVE:X(J5)以上4种表述方式是完全等价的,明显最终种G他沽.在一个程序单元里面,引用一个数据对象的前提是已经声明白它的种种必备属性,数据对望的各种M性里面,最为基本的当然是数据对望的类型,然后还须要声明其各种必衢的试性,这样该数据对型才能被程序正确地调用访问。然而在一个实际的程序里面,数据对象的声明在表面上可能并不是完招的,同时又不是非法的语法,出现这种状况的缘由如M在FoRTRAN的早期版本里,为了求简化的原因,运用r一种断式约定数据类型的方式,即通过数据对象的名称的第一个字母来册别其所属类型,这种类型声明方式被后来的FoRTRAN版本始终沿用下来了,因此假如一个程序单元里出现的数据对能没有经过类型声明语句的特地声明,则须要考虑其是否愿于隐式声明.相反,假如想解除这种陷式声明的影响,则须要另外或独加I以IMP1.ICITNONE语句作为向明,任何其他的属性假如没有出现的话,或者是因为该数据对象不须要某种属性,或者是该数据对象的某种性实行了默认设置.从上面的分类表7-1可以看到.FORTRAN的属性除了用来说明数据类型的M性之外,其他属性都是针而不同的数据类审域程序对象,以及它们的8种特征的.例如数组麻性只是川来说明数组,指针属性只是用来说明指针,而过程属性只是用来说明过程,下面将分类探讨这些属性.7.2 类型声明语句我们在探讨第5货探讨数据类型的时候给出数据类型的基本声明语句的句法形式,这里将侧sRF数据类型的声明与其他相关属性的施容,因为从语言的尚沽与白然的角度动身,把一个数据对象的类型和其他同性都归结为一条数据声明语句是特别可取的.所以我的得到如下的一般的类型声明句法形式(R50U:cypc-spccification.u11ribuic-SpccifkDtion).:Jcnticy-<Jcvlaration-lis即作为选项,在一条数据对象的类型声明(Iyp1.SPei辰MiOn)语句当中,在数据项声明的列表(Cntitydcclan11ionlist)之前,给出相应的属性说明(attribute*Spccifkation).方括号U表示可选。类型说明(IyPCTPeifiCalion)的般句法形式(RSo2促如卜几种形式之,INTECiERIkiiid-SdectorlREA1.lkindyIcc"”DoUB1.EPRECISIONCOMP1.EX(kindsclcctorlCHARACTER(characer-sclxtor1.oGlCA1.Ikiiid-SekcuwlTYPRIypc-nameI其中种别选择符(kindrekcor)的句法形式(R506)为:(KIND=)kind¼3ue>其中种别值(kind、SlUe)是一个标量胫型友达 属性说明WribUIeSpecificaiioiD的搬句法形式(R5O3)为如下几种形式之,:PARAMETERA1.UKJAAB1.EDIMNSION(ar11yspccificaliim)EXTERNA1.INTENTIinICINTPCCifkn)INTRINSICOPTIONA1.POINTERSAVETARCiETucccviXpCCigliml其中的可访问性说明(access.SpedfiCMion)包括PUB1.IC和PRIVATE。 数据项声明的一殷句法形式(R505)为如下2种形式之一,objectne(af11y-jpecfkahn)14Cluraeter-length)(nilialzaliunfunction-name(array*spcciGcati<m)14Chiinicter-Icngth其中初始化(iniMiz破沁n)的一一句法形式(R5O5)为如卜2种形式之r=initalialionepre>Mi=>NU1.U)类型声明的一般规则如下: 对数据对象的说明优先于脸式类型描述,即隐式类型描述法恒久只是在数据对象没有获得任何说明的状况下的默认法则,而显式说明既可以与隐式法则一样,也Ur以不一样. 在一个类型声明语句当中,同一个属性只能出现一次, 在一个作用域内,一个数据项的任何属性只要约定了一次,就不行再次约定。 种别选择符所取的种别值只能是编译系统所许可的相应类型的种别参数之字符长度(CharaCIer-Iength)选项只能出现在CHARACTER类型的声明语句当中.假如运用初始化谙句,则必需在数据项声明前运用双付号(:).1.1.2 实型R1.A1.暗句声明白实生数据时象的Z林,同时也可以附加种别参数以及其他蟠性.假如给出种别选择符,即说明该实型数据的农示方法。双精度实审数据还可以运用DOUB1.EPRECISION语句加以声明,当然与在REA1.语句当中运用种别参数是完全等价的.由于DOUB1.EPRECISION本身指出了精度表示方法.因此不能再在后面附加种别选择符.不过DOUB1.E这个词也可以作为一个命名整型常业,取双精度实型的种别缶数侑,这样就Ur以运用REAUDOUB1.E)来声明双精度实型数据了。实型数据的声明的格式如下:REA1.I(IKIND=Jkind-value)11«atribute-lC:enry-liMDOUB1.EPRECISIONattnbmc-lisc):)eniry-kM【例76】下面是各种形式的主要说明数据项的声明语句:REA1.(KIND=high).OPTIONA1.:ETREA1.SAVE:a(IO),b(2<3O)DOUB1.EPRECISION.POINTER:jA.B(s.)DOUB1.EPRECISION.DJMtNSK>N(5.。):TAB1.bI.TABIJ:2R111.(DOUBI),POINTER:;AB(:.)REAUDoUB1.BhDIMENSION(5.IO)z:TAB1.EhTAB1.£2【例77】下面是各种形式的主要说明数据属性的声明谙句:REA1.(KIND=hhlIeMvaJREA1.a110),W2OM)OpTlONA1.icstvaJSAVEa.bDOUB1.EPRECISIONTAB1.El.TAB1.£2DIMENSIONTAB1.EI(5.10).TAB1.E2(5.10).B(t.)POINTERA可以比较什么两种表示方法,在说明臼同样的意思的前提下,把屈性说明附加在数拉:类生说明语句当中,比H种园性单独,个语句加以说明要简洁自然得多。1.1.3 复型COMP1.EX语句声明白更型数据对象的名物:,同时也可以附加种别参数以及其他处性。假如给出种别选择符,即说明该IX里数据的表示方法.说明发型数据类里的句法为:COMp1.EXKIKIND=kxl-value11.allnbulelisl:EryIE【例7-8下面是各种形式的发型数据对象浑明语句:COMPll-XchCOMPIJ-XIKIND=4).PRlVATE:zz.y>!等价FCOMP1.EX"2yyCOMP1.EX<8)ax.by'COMP1.EX-16ax.byCOMP1.EX(kind(4)y(IO)complex<kixl-11)xaz(IO)1.1.4 逻辑型I-OGICA语句比明白逻辑型数则对您的名称,同时也可以附加种别参数以及其他屈性.假如给出种别选择符,即说明该龙耨S!数据的表示方法,说明逻辑型数据类型的句法为:1.OGICA1.(KIND=kxl-vaJuc),a11nbuclist):cnry*lis(【例79】卜面是各种形式的主要说明遗纲型对象的评明语句:1.(Xj!CA1.AUXXrATABlJ:二Ilagl.Il芈2IXXjICA1.(KIND=byte),SVB:doit,dnnt【例7.10下面是各种形式的主要说明对象的屈性的声明语句:1.OGICA1.flagI.flag2UXilCAl.(KIND=byUrlduil.d<mtaliqcatarlen;5i.n;喀2SAVEdoit,don't1.1.5 字符型CHARACTER语句声明白字符4!数据对3的名称,同时也可以附加种别参数以及其他属性。偿如给出字符选择符,即说明该字符型数据的最大字符长度。说明字符型数据类里的句法为;CHARACTERchara<cr-selcct(M),auribuc-liM:CntQ-Iisi共中的字符选择符(ChamCtCrTClCC2。的句法形式(R507)可以为如下几种:ICngthrdCe(Or(1.EN=Icngth-Vaiuc.KIND=kind-ValUc)(lenglh-Val>e.KIND=Jkindvalue)KIND=ki11d-vah?.I.FN=lcnglh-vauc)其中长度选挣符(Iengthsdector)的句法形式(R508)可以是:(1.EN=|ICI喀IhNaIUCJ*ChAnictcr-IcngthI.其中字符长度(1.ENKR509)可以是:(length*valuc>uralar-inlege!teralcusUn(其中长度值(Ienavalue)(R510)可以是:Sptxificfliioiwxpfwsion在上面的类型说明当中,运用星号*来标记字杼长度的方式属于过.时的方义,不过不足指在数据呼里面运用的星号“.字符型数据时象类型声明语句的一般规则如下: 只有在没有运用双时号的状况下,在长度选择符里才可以运用逗号. 字符型数据对象的字符长度在确定的情形下,是可以发生动态变更的,即当一个字符里数据的声明语句出现在一个过程或者是过程界面当中,同时该数据对象又不是某个派生数据对箴的成员,那么它的字符长度可以焰川特别盘表达式.该表达式的详细取值只行当访问该过程时才被确定,并且当该过程的运行时,衣达式里变球的变更并不影响字符长度伯.这样一种数据时象假如不园丁哑元,则属于自动数据对象的范畴, 字符长度的说明有三种情形: 首先在数据项或数据项列的成员里给出字符长度: 假如没有上面的长度说明,则在数据类型说明部分给出命名字符数据项或派生类型定义当中的字符成员的字符选择符,用来给出长度属性: 假如一个字符型数据既没有运用字符选择符也没有运用字符长度洪说明其长度.那么默认的字符长度为I. 假如长度参数取货值,那么相应的字符项长度为0, 给定r字符长度的标量整型文字常设不能再附加任何种别参数,否则在固定就码形式里面就会导致歧义. 采纳带星号"的长度说明只能运用于以下几种情形: 可以应用于过程的哑元.当过程被调用时,呼元就被给予相应实元的长度: 可以用于声明命名常显,这时它的长度是一个常见值: 可以用于尚明一个外部函数的结果变量的长度,任何调用该函数的作JlJ域单元假如运用带星号的长度说明,就意味着主程序可以访问该声明.当函数被询用的时候,结果变电的长度的取值由引用该函数的程序单无里面的相应声明谙句确定.本规则示意了在IMP1.ICIT语句当中不能运用指星号”的长度说明方式. 假如一个函数属于内部函数或模块函数,或者该函数的值为数组,指针或递归形式,那么该函数名不能运用带星号*的长度声明. 字符值语句函数或字符型语句函数哑元的长度必需是整型常r衣达式.【例7/1】下面是各种形式的主要说明字符型数据对象的泮明语句:CHARACTER(1.EN=25.KND=GREEK).DIMENSIONIi)>1ZlCHARACTER(1.bN20.KIND=KANJl1.SAVE:GREEnNG(2)CHARACTER(10):QUESTION="WHERE?"CHARACTER(1.EN=*.KlND=CHlNESE).PARAMETERlMESSAGE=&“得朴是语言的种美CHARACTER(»).INTENT(IN>::SCH(M)1.HOMECHARACTER*3.SAVE:COMPONI=NT.1.1.ONGER(9)»20.COMW)NENT_2CHARACTER:RESU1.T="PASS''例7-12:下面是各种形式的主要说明字符型数据的睇性的声明谱句:CHARACTER(砌PROJEeTCHARACTER1.EN=3O.KIND=GERMAN>TRANSFORMATlONCHARACTER(1.EN=25.KIND=GREEK>Z1CHARACTER(1.EN=20.KI、D=KANJIgREEnNGCHARACTER11O>QUESTIONCHARACTEROSCH1.HOMECHARACTER,3COMPONENT.I.1.ONGER(Q)20.COMPONENTCHARACTERRESU1.TSAVEGREETING2)INTENTuN)SCHoO1.HOMEDATAQUESTION/“WHERE?"/CHARACTER(*)MESSAGEPRAMETER<MESSAGE=&“简朴是语言的一种关tr)1.1.6 派生类型TYPE语句评明白用户海牛.数据类型对象的名称,派生类型的名称写在常跟TYPE后面的一对括号当中,声明派生类型的数据对望的一般句法为,TYPEUypCmfnCM,atlributeliM:)CmryJiW派生类型声明语句的一般规则如下: 假如一个派生类型对象是私有的话,就不能附加PUBUC国性。 结构构造涔必需用来初始化派生类型数据对象.结构构造器里的表达式必需是初始化表达式. 假如次要声明的派生数据对象是个函数的结果,那么它就可以在FUNCnoN语句当中予以说明,【例7-13下面是各种形式的主要说明派生数据对象的声明i普旬:TYPHSAMP1.EbDIMRNSION(:).A1.lQCATAB1.E:STOVETYPE(STUDENT).SAVEiGRAD(5)TYPE(HOMEWORK>.SAVE:QUESTION.TAPE.WORD.SHEET【例7-14下面是各种形式的主要说明派生数据对软的属性的声明谪句:TYPE(SAMP1.E>STOVETYPE(STVDENT)GRAD<5lYre(H()MtWORK>QUE!<llON.TAPE.WORDJHEtTDIMENSIONSTOVE(:)AU,OCATAB1.ESTOVESAVEGRADl5).QUESTION.TAPE.WORD-SHEET留意上面这两种说明方法里面标点的不同用法.7.3 隐式类型描述法当时FORTRAN运用除式类型声明方法,是与语言的简朴形态相适应的,在硬件资源相对膝缺的时代,简朴也能成为谙才的一种美的.不过假如到了极!件资源相对宓余的今日.还吝啬于增加几个关键词和几条比明语句,就会显得很落伍了,所以后来就增加了更为接近自然语言的泮明语句,不过,为了缅怀FORTRAN语言作为祖母级高级语言的装艇,隐式类型声明方式还是保留下来了,甚至默认为总是起作用,除非首先声明白IMPucrrNONE语句.当然,只要你乐意运用,这种类型声明方式在某些状况下,还是特别便利筒明的。除式类型声明方法的动身点.是考虑到任何须要加以类型声明的对象,如变量,命名常用.函数等,都须要一个名称洪指称.那么就可以把它的类型这个信息负载在它的名称上.她简洁的约定,就是让名称的第一个字母来标记它的类型,例如在默认的情形下:real.AbcdefghINTEGER!IJK1.MNreal:Opqrstuvwxyz可以发觉,上面对字母的默认安揖并不是很难记忆,FoRTRAN沿用了数学里的许多习惯,这里运用1.J.K.1.M.N来表述播数,就是一个明显的数学习惯。除了上面就认的首字母喙式类型法则,隐式类型声明方法还有很敏捷的一面即利用IMP1.ICIT语句来臼定义字母安排模式.般的IMP1.ICIT语句的句法形式(R54I)有2种.分别行使不同的功能:IMP1.ICITtypc-se>cifica(ion(letter-scc11caiion-1M>IMPUC11,NONE其中的字母安排说明列去的句法形式<R543)为:kited-c<tcfI这里IMP1.lClT后面的字母安排表定义可以完全是自田定义,并且只是在该谱句的作用域内有效,而任何名称在它的作用域内只要是没仃特地的类型声明语句,也没干jIMP1.ICIT语句,那么它就遵循上面的耿认存字母隐式类型法则.隐式类型的一般规则如下:假如要运用IMPuen'NONE语句,那么它必需放置在任何PARAMETER语句之前,并旦在其作用域内,再也不能出现其他IMPueIT语句。 IMP1.ICITi吾句当中&现的表述字母范明的Mter-Mter.左边的?母确定不能是右边字母的依据字母友依次的后面的字母. IeueMeuer的字母之间为M号,而非下划戏,表示依据字母表依次从左边字母到右边字母的全部字母.在一个作用域里面.的IMP1.IClT语句里面同一个字母不能出现在字母安排说明列表里面的不同项里,例如作为IR个字母出现了,又同时处于另一个字母范围之中,或同时处于2个不同的字母范附里面, IMP1.ICIT语句同样可以用来为派生数据类型安排首字母作为类型标记.默认的首字母隐式类型法则与IMP1.ICIT谱句之间的关系值得特殊加以留意.例如给出约定:IMP1.ICITCOMP1.EX<E-G.W-Z)然后在该谱句的作用域里内也没有其他IMP1.ICIT谱句,也没有类型声明谱句,那么在该作用域内具有不屈于(EP.W-Z)这个近留的首字璟的变I匕将遵循默认苜字母安挂衣,即首字母在范树(AD,H,OM内的变盘属于实型,而首字母在范用(1.N)内的变此版于整型°IMP1.ICITNONE可以用来检荏名称的错误拼法,因为假如不加以这个谙句的话,即使错误拼法的名称,也会被看成遵循首字国命式类型声明方法的具有确定数据类型的变fit从而能峡通过语法桧育,反之运用该语句,就可以避开这种误会,【例7-15卜面的IMP1.lClT语句都是合法语句:!MI1UCITCHARACTER30(B.T>.COMP1.EX(W-Z)1MI,UC111.<XilCA1.(KlNDB11(Q)IMPuClTRrAlXQUADHX-Z)IMP1.imTYPE(NVMBERXA-E)IMl,UC11TYl,E(ARIICA1.)(AV».CHARACrER,IaKB)【例7-16下面的IMP1.ICIT语句都是非法语句:IMP1.ICITCHARACTER*3(KB.T).COMP1.EX(Z-W>!W应当放Jg在Z之,前.1MI,UC111.tXilCA1.(KINlBiT)(Q).REA1.(QeADKP-T)!Q同时表!示2种类电.IMPUCTYPE(ART1C1.XA-H),CHARACTFR-KXhB.Q)!B同时表!示2种类型.运用除式类型声明在一个嵌套作用域地面所导致的变僦作用域混乱问题在有关作用域之间通讯时再探讨.7.4 数组属性敬组的概念来源干教学的向校概念,外大的特点就是数处的各个重曲必需是同一种数据类型,同样的种别参数具有同样的属性.因此数组本身作为一个数据对象,最主要的阿件就只剩下它的维度,也就是它的扶.作为一个变宽的数如UJ以有多种形式,除了它的重愤可以发生变更之外,它的维度也可以发生变更.fj3种情形须要数组的维度不予冏定: 在程序运行当中,数组所占据的存储空间不是固定的,而是可於新安排的,这意味着该数组必定具有A1.1.OCATAB1.E属性; 该数处被给予指针的属性,使得它的维度无法预先固定卜来: 该数组本身就此一个哑元,它的维度依赧于别的变信对它的赋值状况.因此数组本身形态的说明出现了4种形式,而数组所特有的属性,主要就是DIMENSION和A1.1.OCATAB1.E,卜面分小节予以说明,7.3.1 数组描述的4种形式数组描述的4种形式的句法形式依513)为:CXPIiCn、IUPerP<xifkMionJiVdcfc11rrd-shapc-spccification-liMassumed*sac*spccifieation*litax%umedsizespecicalu>n这四种形式分别用来描述数组在程序当中出现的四种可Ife情形; 首先是G基本的显形数组(e*plicil-shaarrays),即在定义数祖的时候就己经给出它的形态: 当一个数组具有指针属性,或具有可安排JW性时,它的形态就没法预先给定,须要在程序运行过程当中通过指针比安排过程予以确定,这时就须要运用恃定形数姐(deferred-shapearrays)的形式来加以描述: 当数组本身出于哑元时,它的形态就须要实元来给予,这样就须要运用喳形数组(assumed-shapearrays)的形式来加以描述; 假如实元给予一个作为哑元的效殂时,只是确定它的尺度,而没有给定其他形态要制那么就须要运H师尺度数组(assumed-sizeIHTayS)的形式来加以描述.下面我们将分节说明这四种数组的描述方式.数组的描述的一般规则如E:.依据FORTRAN标准,数组的秩至少可以达到7.尽管一般应用环境里.秩为2或3砧最常见的,但是对于一些特定的计算问时,可能须要用到特别高的维度的数组,所以一般的FORTRAN编译器都能支持远大于7的佚, 一个标的秩为0. 待定形数组必定或者具有POlNTER的属性或者具行A1.1.OCATAB1.E的屈性. 哑形数组和哑尺度数组必定隔于哑元。 必需用意待定彬数纲和哑形数祖的表示形式可能出现缶同的时候,即都是运用一个日号表示.7.3.2 显形数组帧名思义.所湍显形数组就是对于数组的每-个维度都给出了详细的上下界,每个维度的显形说明的句法形式(R514)如下:(Iow-IxhiixJ)upper-bound其中的上界(upper-bound)和卜界UoW-bound)为说明表达式C参见表达式显形数组的一般规则如下: 显形数组的说明列表里所给出的上下界对的数目必衡与该数组的维度数目一样。 黄如卜界被省略了,则表明取默认值I, 上下界可以是正整数,也可以足负整数.还可以是0. 数组的下标范围就是在上下界之间.包括上下界本身的全部整数集合,并且上界不能小于下界,假如出现这种状况,表明下标范用为空集,或者说其相应维度的宽度为0,而且数组的尺度也为0, 假如I:下界是以表达式的形式出现,那么可能包含变盘,使得上下界的详细取值在数组所处的过程运行当中发生变更,这时,该数组必定是一个哑元,或者是一个函数结果.或者是一个动态数组,【例7-17卜面是主要说明数据项的声明语句:INTFGERX(20:30.5.-10:40)SUBROUTINEAAA<hJ.K)REA1.,DIMENSIONdO:l>2.J>:>K【例7-18下面是主要说明M性的声明语句:INTEGERX(20s30.5.-IO140)SUBROUTINEA(I.J.K)REA1.KDIMENSIONK<IO>1>2.J)7.3.3 待定形数组待定形数组用来表示具有指针屈性和可安排属性的数组。 对于指针数加来说,数殂的每个维度的宽度是在指针被安排或指针赋值语句被执行之后才给定的: 对于可安排数组来说它的上下界只是在被安排之后才给出.因此对于这种效国的形态说明,只能运用一个冒号,即如下的句法形式(RSI8):待定形数组的一般规则如下: 待定形数组的秩等于它的说明列表当中出现的口号的数目. 当特定形数组完成存储安排之后,它的上下界在A1.1.OCATE诏句当中被确定. 利一个指针数殂的目标数组的每个维度执行固有国数1.BoUND,就能得到指针数组的相应维度的卜界;同样的,对一个指计数纲的目标数纲的旬个维度执行固有函数UBOUND,就能得到指忤数组的相应维度的上界.因此, 假如上下界是由指针的安排确定,那么该数组的形态就Ur以由用户来指定: 假如上下界是由指针的赋值确定,爆么该数组的形态就可以有二种情形: 假如指针目标是一个命名全数"1.那么上下界就由该数组的声明确定,或者在该数组被安排之后给出; 假如指针目标是一个数组片断.那么它的下界为1,而上界为所处维度的宽位。 假如指针数组或可安排的上下界里面包含变效,那么当变量在随后有了重定义与去定义的情形的话,上下界不受这种变更的影响.【例7-19下面是主要说明数据项的声明语句:RI1.POINTER:A<:.:).B(:.:>REA1.A1.1.OCATAB1.E:>A(>.)【例7-20)卜面是主要说明属性的声明语句:REA1.A(:.:).B<:.:)POINTERA.BA1.1.OCATAB1.EA7.3.4 哑形数组所谓哑形数组,就是一个吨元,它的形态只有在与一个实元相结合时才能定下来,吨形数组的说明句法(R517)为:low-txHndI即只是可选地给出一个下界然后就是一个冒号,下界阙如,表示未定.哑形数组的一般规则如下: 哑形数组的说明列表当中出现的苜号的个数,就等于该数级的秩, 下界或者明确给出,或者省略,表示下界取默认值1. 上界等于数组在相应维度上的宽质加下界值减1. 哑形数组不能具有PolNTER或A1.1.oCATAB1.E这:种/性。 未结合指针数组的尺度,界和形态都是未定义的,这样一个数批的任何部分都不能被引用或定义,不过这样的数嵬可以作为周有查询的数的变盘出现.从而可以查询变址状态.数据类型性J乱类型参数,或者结合状态.【例7-21下面是主要说明数据项的声明语句:SUBROir11NGAAAlX.Y.Z)REA1.DIMENSIONS:.s):REA1.,INTENTaN):X(:).Y(5:)【例7-22)卜面是主要说明属性的声明语句:Slibrolhingaaax.y.Z)REA1.X(:),Y(5:).ZDIMENSIONA(51.)INTENT(IN>X.Y7.3.5 哑尺度数组一个哑尺度数纲就是一个呼元,而它的尺度内与它相关联的实元设定,因此在声明呼尺度数组时,就给定了它的尺度,即铁,宽度和界(爆终一个维度的上界和宽度除外人对于唾尺度数组和实元之间的关联有如卜规则: 二者具有相同的初始数组元素. 后继数组元素是依掘存储依次排列的. 哑元的声明就须要给出数细的秩,全部维度的下界,以及除了最终一个维度之外的全部的上界与宽强。 实元的尺度哑元的尺度.哑尺度数组的G终一个维度的上界不能给出,因此运用星号(*)表示。哑尺度数处的句法形式(R519)为:Ieplrtslwpelisl.IlklWhRmd:)*可见,哑尺度数组与显形数组在形式上的主要差别就是最终一个维度的上界布侍给出“哑尺度数组的一般规则如下: 变尺变数纲的秋就是它的显形数组的说明列表拒中的说明数目加I, 喷尺度数组的尺度依据以下途径来确定: 假如与哑元和关联的实元是非默认字符类型的1意其他类型数组,那么哑元的尺度就是实元的尺度. 假如与哑元相关式的文"是我认符类型的随意其他类型数组元素,并且它的不标依次值是一-个尺度为X的数组当中的V.那么该喳元的尺度为X-V+1. 假如与哑元相关联的实元屈于默认字符类型数组,或者属于默认字符里数组元,或者同于公认字符型数组元素子申,假设它起先于一个以c作为字符存储单位的数组的笫I个字符存储单位,那么唾无的尺度为:MX(INT<<ct+n).0)其中e是哑字符数殂里的元素的长度。 设数处的秩为r,那么前r-1维的界都由相应的显形数祖说明给定,最终一个维度的下界则中声明中给出的下界给定,假如没有给出,则取默认值1. 假如界的去达式里面包含变信,那么当相应过程执行时,就会炉致表达式取值发变更,但是当变量在随后假如是有了重定义与去定义的情形的话,上下界则不受这种变更的影响. 函数结果不能成为哑尺度数组. 除了以下两种情形,哑尺度数组不能作为全数组引用:在过程引用当中没有要求实元的形态:引用到固有函数1.BoUND.J7-23J下面是主要说明数据项的声明语句:SUBROUTINGPROA.B.C)REA1.DIMENSION(A.»>::BREA1.C(KX).20.)【例7-24下面是主要说明属性的声明谱句:SUBROUTINGPRO<.B.C)REA1.B.C(100.20.)DIMENSIONB(A.*)7.3.6 数组的四种声明形式的兼容性数组的四种声明形式可以在程序里扮演的脚色彳i各种限制,也就是说具有不同的语法作用。卜面的表7-2给出这四种形式与不同语法单位的兼容性限制:表7-2数组的四种声明形式的兼容性数讥小明的看诊式敢现的语法单位见形致纨恃定形效蛆OJifettSl吃尺度数加表达式的主项研可可否下标向量可可可否哑元可可可可实元可可可>'1等价对象可否否否公用对象可可否S名称列&对象可否否否保留对象可可否S初始化数招时象可SSSUO则我项,J可否格式可可可S内部文件可可可S安排对象否)J否S指针值晦句里的指针对叶否SJ否否将针IU值语句中.的1!标对象可可可S7.3.7 DIMENSION属性和DIMENSION语句数组的维度除了可以在数组声明语句当中,通过数殂名称的说明来给出之外,还可以运IIIDIMENSIoN属性语句来给出,少实上,DlMENSlON语句限于FORTRAN早期标准的遗曲物,现在既可作为单拽的属性语句出现,也可以附加在数据声明语句里面.fitllDIMENSIONE性的数恻类型声明语句的句法形式为:typc-jccifkucion.DIMENSIONUrray-spcci11ca<ion).aribtc-list1&cntity-lisi可以跟在DIMENSION属性语句后面的其他属性有:initialiJrti<>nA1.1.OCATAB1.EINTBMOPTKNA1.PRMF11TRPOINTERPRIVATEPUB1.ICSAVETARGET另外,数组说明可以运用一个数组名称,然后后面附加其他谱句来声明一个数组,这些语句可以是DIMENSlON语句,类型声明,A1.1.OCATAB1.E,POINTER.TARGET.COMMON等语句.假如以说明DIMENSK)N属性为主给出数组定义.僚么可以采纳如下的句法形式(R526):DIMENSION:Jirray11amcarray-xpcci11catinn)1»a11uynamdar11yspccificaiion)J.【例7-25)卜面是主要说明数据项的声明语句:REA1.,A1.1.oCATAB1.E,TARGET:X(:.:)REA1.DIMENSIoN30),TARGET.SAVE:METER【例7-26)卜面是主要说明属性的声明语句:REA1.X(:.:).MCTERDIMENSIONM"TTR(30)TARGETX.METERA1.1.OCATAB1.EXSAVEMEIER【例7.27下面是在其他声明语句当中运用数组说明的例子:REA1.XMETERTARGErXMEIbRiM)AU,OCTB1.EX(:.:)SAVEMETER【例7-28)卜面是在COMMON语句当中运用数组说明的例子:COMMON.MOTION.TlMh<30>.SPACE(HXK).1(XW.10(XH7.3.8 A1.1.OCATAB1.E属性和A1.1.OCATAB1.E语句一个数组可安排是指它的界只有在执行A1.1.OCATE语句之后才能确定。这样一个数组必定是一个待定形改组。A1.1.OCATAB1.E属性只是针对数纲而言才成立。一个具有A1.1.oCATAB1.EM性的数组的类型声明的句法形式为: