《指针与动态数据结构精.ppt》由会员分享,可在线阅读,更多相关《指针与动态数据结构精.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、指针与动态数据结构第1页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.1 11.1 11.1 11.1 概述概述概述概述/概述概述概述概述l静态数据结构静态数据结构:在编译时为其分配存储空间在编译时为其分配存储空间,大小不能改变。大小不能改变。l静态数据结构优点静态数据结构优点:分配算法简单分配算法简单,易于实现易于实现,使用方便。使用方便。l静态数据结构缺点静态数据结构缺点:易浪费存储空间易浪费存储空间,易产生下标越界错误。易产生下标越界错误。l动态数据结构动态数据结构:在运行时为其分配存储空间在运行时为其分配存储空间,大小可改变。大小可改变。l动态数据结构优点动态数据结构优
2、点:可节约存储空间,灵活,应用广。可节约存储空间,灵活,应用广。l动态数据结构缺点动态数据结构缺点:分配算法复杂分配算法复杂,实现难度大。实现难度大。象象链表链表、树结构树结构、图结构图结构等数据结构都适合用动态数据结构实现,等数据结构都适合用动态数据结构实现,指针是实现动态数据结构的有效手段。指针是实现动态数据结构的有效手段。指针和动态数据结构广泛应用于软件设计,熟练掌握和灵活应指针和动态数据结构广泛应用于软件设计,熟练掌握和灵活应用指针和动态数据结构求解问题,可使程序更加简洁、紧凑、高效。用指针和动态数据结构求解问题,可使程序更加简洁、紧凑、高效。11.1 11.1 概述概述第十一章第十一
3、章 指针与动态数据结构指针与动态数据结构u u 概述概述u u 存储结构存储结构u u 访问方式访问方式u u 指针声明指针声明u u 指针状态指针状态第2页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.1 11.1 11.1 11.1 概述概述概述概述/存储结构存储结构存储结构存储结构u存储单元地址存储单元地址:存储单元在内存中的排列序号(编号)。存储单元在内存中的排列序号(编号)。u存储分配存储分配:系统为变量、数组、结构体、指针分配连续存储单元,用系统为变量、数组、结构体、指针分配连续存储单元,用于存储有关数据,其变量名、数组名、结构体名、指针名代表连续存于存储有关数据,
4、其变量名、数组名、结构体名、指针名代表连续存储单元首地址。储单元首地址。u指针变量(指针)指针变量(指针):为其分配的存储单元用于保存其它变量、数为其分配的存储单元用于保存其它变量、数组、结构体的地址。通过改变其所存储的地址内容实现动态数组、结构体的地址。通过改变其所存储的地址内容实现动态数据结构。据结构。u示例:示例:INTEGER,TARGET :I=1255 INTEGER,TARGET :I=1255 REAL:R=534.45 REAL:R=534.45 CHARACTER*5:S=CHINA CHARACTER*5:S=CHINA INTEGER:A(3)=(/35,45,55/)
5、INTEGER:A(3)=(/35,45,55/)INTEGER,POINTER:P INTEGER,POINTER:P P=I P=I11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构u u 概述概述u u 存储结构存储结构u u 访问方式访问方式u u 指针声明指针声明u u 指针状态指针状态第3页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.1 11.1 11.1 11.1 概述概述概述概述/访问方式访问方式访问方式访问方式11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构u直接访问直接访问:直接访问存储单元
6、中的内容。如对普通变量、数直接访问存储单元中的内容。如对普通变量、数组元素、结构体成员的访问,采用直接访问方式。如图组元素、结构体成员的访问,采用直接访问方式。如图11-11-2 2所示。所示。u间接访问间接访问:先从存储单元中得到被访问存储单元地址,然后先从存储单元中得到被访问存储单元地址,然后通过该地址访问被访问存储单元中的内容。如对指针变量通过该地址访问被访问存储单元中的内容。如对指针变量的访问,采用间接访问方式。如图的访问,采用间接访问方式。如图11-311-3所示。所示。u指针变量存储单元中保存目标变量地址,通常用箭头表示。指针变量存储单元中保存目标变量地址,通常用箭头表示。F90F
7、90指针保存目标变量名称,将指针看成目标变量的别名。指针保存目标变量名称,将指针看成目标变量的别名。u指针变量声明后指针变量声明后,未分配存储空间未分配存储空间,访问前需分配存储空间。访问前需分配存储空间。(示例示例)I I125125125125J J3753753*1253*125I=125I=125J=3*IJ=3*IP PI I125125125125J J3753753*1253*1253*P3*PI I地址地址I=125I=125P=IP=IJ=3*IJ=3*Iu u 概述概述u u 存储结构存储结构u u 访问方式访问方式u u 指针声明指针声明u u 指针状态指针状态第4页,本
8、讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.1 11.1 11.1 11.1 概述概述概述概述/指针声明指针声明指针声明指针声明11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构uPOINTERPOINTER属性属性:通过通过POINTERPOINTER属性声明指针变量。属性声明指针变量。uTARGETTARGET属性属性:通过通过TARGETTARGET属性声明指针可指的目标变量。属性声明指针可指的目标变量。u一般格式:一般格式:,POINTER:,POINTER:,或或 POINTER POINTER,例:例:REAL Q1,Q2 REAL Q
9、1,Q2 INTEGER,POINTER:P1,P2 INTEGER,POINTER:P1,P2!声明指向整型变量的指针声明指向整型变量的指针P1P1和和P2P2 POINTER Q1 POINTER Q1 !声明指向实型变量的指针声明指向实型变量的指针Q1Q1 POINTER IQ1,IQ2 POINTER IQ1,IQ2!声明指向整型变量的指针声明指向整型变量的指针IQ1IQ1和和IQ2IQ2 u u 概述概述u u 存储结构存储结构u u 访问方式访问方式u u 指针声明指针声明u u 指针状态指针状态第5页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.1 11.1 11
10、.1 11.1 概述概述概述概述/指针状态指针状态指针状态指针状态11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构u指针有三种状态指针有三种状态:未定义、空指针、被关联。未定义、空指针、被关联。未定义:程序在初始状态中未定义所有指针。未定义:程序在初始状态中未定义所有指针。空指针:指针已定义,但未成为目标变量别名。空指针:指针已定义,但未成为目标变量别名。被关联:指针已定义,已成为目标变量别名。被关联:指针已定义,已成为目标变量别名。u u 概述概述u u 存储结构存储结构u u 访问方式访问方式u u 指针声明指针声明u u 指针状态指针状态第6页,本讲稿共
11、24页苏州科技大学计算中心苏州科技大学计算中心11.1 11.1 11.1 11.1 概述概述概述概述/概述概述概述概述/动态数据结构示例动态数据结构示例动态数据结构示例动态数据结构示例l静态数据结构静态数据结构:在编译时为其分配存储空间在编译时为其分配存储空间,大小不能改变。大小不能改变。l静态数据结构优点静态数据结构优点:分配算法简单分配算法简单,易于实现易于实现,使用方便。使用方便。l静态数据结构缺点静态数据结构缺点:易浪费存储空间易浪费存储空间,易产生下标越界错误。易产生下标越界错误。l动态数据结构动态数据结构:在运行时为其分配存储空间在运行时为其分配存储空间,大小可改变。大小可改变。
12、l动态数据结构优点动态数据结构优点:可节约存储空间,灵活,应用广。可节约存储空间,灵活,应用广。l动态数据结构缺点动态数据结构缺点:分配算法复杂分配算法复杂,实现难度大。实现难度大。象象链表、树结构、图结构链表、树结构、图结构等数据结构都适合用动态数据结构实现,等数据结构都适合用动态数据结构实现,指针是实现动态数据结构的有效手段。指针是实现动态数据结构的有效手段。指针和动态数据结构广泛应用于软件设计,熟练掌握和灵指针和动态数据结构广泛应用于软件设计,熟练掌握和灵活应用指针和动态数据结构求解问题,可使程序更加简洁、紧活应用指针和动态数据结构求解问题,可使程序更加简洁、紧凑、高效。凑、高效。11.
13、1 11.1 概述概述第二章第二章 FORTRAN90 FORTRAN90开发环境开发环境a a1 1a a2 2a an n 链表链表树结构树结构图结构图结构u u 概述概述u u 存储结构存储结构u u 访问方式访问方式u u 指针声明指针声明u u 指针状态指针状态第7页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.1 11.1 11.1 11.1 概述概述概述概述/存储结构存储结构存储结构存储结构/示例示例示例示例u存储单元地址存储单元地址:存储单元在内存中的排列序号(编号)。存储单元在内存中的排列序号(编号)。u存储分配存储分配:系统为变量、数组、结构体、指针分配连续
14、存储单元,系统为变量、数组、结构体、指针分配连续存储单元,用于存储有关数据,其变量名、数组名、结构体名、指针名代用于存储有关数据,其变量名、数组名、结构体名、指针名代表连续存储单元首地址。表连续存储单元首地址。u指针变量(指针)指针变量(指针):为其分配的存储单元用于保存其它变量、数为其分配的存储单元用于保存其它变量、数组、结构体的地址。通过改变其所存储的地址内容实现动态数据组、结构体的地址。通过改变其所存储的地址内容实现动态数据结构。结构。u示例:示例:INTEGER,TARGET :I=1255 INTEGER,TARGET :I=1255 REAL:R=534.45 REAL:R=534
15、.45 CHARACTER*5:S=CHINA CHARACTER*5: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 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构 12551255534.45534.45CHINACHINA35354545555510001000整型变量整型变量I,I,地址地址1000,41000,4字节字节,值值12551255实型变量实型变量R,R,地址地址1004,41004,4
16、字节字节,值值534.45534.45字符型变量字符型变量S,S,地址地址1008,51008,5字节字节,值值CHINACHINA整型数组整型数组A,A,地址地址1013,121013,12字节字节,值值3535、4545、5555指针变量指针变量P,P,地址地址1025,41025,4字节字节,值为值为100010000 01 11000100010041004100810081013101310251025n n图图图图11-1 11-1 11-1 11-1 变量、数组、指针以及与地址的关系变量、数组、指针以及与地址的关系变量、数组、指针以及与地址的关系变量、数组、指针以及与地址的关系
17、u u 概述概述u u 存储结构存储结构u u 访问方式访问方式u u 指针声明指针声明u u 指针状态指针状态第8页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.1 11.1 11.1 11.1 概述概述概述概述/访问方式访问方式访问方式访问方式/示例示例示例示例11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构u直接访问直接访问:直接访问存储单元中的内容。如对普通变量、数直接访问存储单元中的内容。如对普通变量、数组元素、结构体成员的访问,采用直接访问方式。如图组元素、结构体成员的访问,采用直接访问方式。如图11-11-2 2所示。所示。u间接
18、访问间接访问:先从存储单元中得到被访问存储单元地址,然后先从存储单元中得到被访问存储单元地址,然后通过该地址访问被访问存储单元中的内容。如对指针变量通过该地址访问被访问存储单元中的内容。如对指针变量的访问,采用间接访问方式。如图的访问,采用间接访问方式。如图11-311-3所示。所示。u指针变量存储单元中保存目标变量地址,通常用箭头表示。指针变量存储单元中保存目标变量地址,通常用箭头表示。F90F90指针保存目标变量名称,将指针看成目标变量的别名。指针保存目标变量名称,将指针看成目标变量的别名。u指针变量声明后指针变量声明后,未分配存储空间未分配存储空间,访问前需分配存储空间。访问前需分配存储
19、空间。(示例示例)I I125125125125J J3753753*1253*125I=125I=125J=3*IJ=3*IP PI I125125125125J J3753753*1253*1253*P3*PI I地址地址I=125I=125P=IP=IJ=3*IJ=3*II I2525!例例11.1 11.1 使用指针实现两个整数交换使用指针实现两个整数交换INTEGER,TARGET:I,J INTEGER,TARGET:I,J !声明两个目标变量声明两个目标变量I I和和J JINTEGER,POINTER:P1,P2,P3 INTEGER,POINTER:P1,P2,P3!声明三个
20、指针变量声明三个指针变量P1P1、P2P2和和P3P3I=25;J=35 I=25;J=35 !给目标变量给目标变量I I和和J J直接赋值直接赋值P1=I;P2=JP1=I;P2=J !给指针分配指向给指针分配指向I I和和J J的存储空间的存储空间 PRINT*,PRINT*,未未交交换换数数据据:,P1,P2,P1,P2 !通通过过指指针针变变量量间间接接输输出出I I和和J J的的值值P3=P1;P1=P2;P2=P3 P3=P1;P1=P2;P2=P3 !交换指针交换指针P1P1和和P2P2指向的目标变量指向的目标变量PRINT*,PRINT*,已已交交换换数数据据:,P1,P2,P
21、1,P2!通通过过指指针针变变量量间间接接输输出出J J和和I I的的值值ENDENDI I2525P1P1图图11-4 11-4 指针交换指针交换J J3535P2P2J J3535P2P2P1P1P3P3交换前交换前交换后交换后u u 概述概述u u 存储结构存储结构u u 访问方式访问方式u u 指针声明指针声明u u 指针状态指针状态第9页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.2 11.2 11.2 11.2 指针引用和赋值指针引用和赋值指针引用和赋值指针引用和赋值/指针引用指针引用指针引用指针引用l指针引用:指针引用:引用指针所指目标变量。引用指针所指目标变量
22、。11.2 11.2 指针引用和赋值指针引用和赋值第十一章第十一章 指针与动态数据结构指针与动态数据结构u u 指针引用指针引用u u 指针赋值指针赋值u u 结构体指针结构体指针!例例11.211.2INTEGER,TARGET:R=25INTEGER,TARGET:R=25INTEGER,POINTER:PINTEGER,POINTER:PP=RP=RM=3*P-4M=3*P-4PRINT*,P,MPRINT*,P,MENDEND!结果:结果:2525,7171!例例11.311.3INTEGER,POINTERINTEGER,POINTER:P1,PP1,PINTEGER,TARGETI
23、NTEGER,TARGET:R=12R=12P=RP=RR=2*PR=2*PPRINT*,P,RPRINT*,P,RENDEND!结果:结果:2424,2424!例例11.411.4INTEGER,TARGETINTEGER,TARGET:R=13R=13INTEGER,POINTERINTEGER,POINTER:P1,P2P1,P2PRINT*,P1,P2,R PRINT*,P1,P2,R P1=RP1=RP2=P1P2=P1ENDEND !结果:结果:1313,1313,1313第10页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.2 11.2 11.2 11.2 指针引
24、用和赋值指针引用和赋值指针引用和赋值指针引用和赋值/指针赋值指针赋值指针赋值指针赋值l别名赋值:别名赋值:将目标变量名作为别名赋值给指针。将目标变量名作为别名赋值给指针。l数据赋值:数据赋值:将数据表达式值赋值给指针所指目标变量。将数据表达式值赋值给指针所指目标变量。l一般格式:一般格式:=11.2 11.2 指针引用和赋值指针引用和赋值第十一章第十一章 指针与动态数据结构指针与动态数据结构!例例11.511.5INTEGR,TARGETINTEGR,TARGET:R1=25R1=25INTEGR,TARGETINTEGR,TARGET:R2=35R2=35INTEGER,POINTERINT
25、EGER,POINTER:P1,P2P1,P2P1=R1P1=R1P2=R2P2=R2P1=P2P1=P2PRINT*,P1,P2PRINT*,P1,P2ENDEND!结果:结果:3535,3535P1P1P1P1R1R12525R2R2P2P23535R1R13535R2R2P2P23535u u 指针引用指针引用u u 指针赋值指针赋值u u 结构体指针结构体指针第11页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.2 11.2 11.2 11.2 指针引用和赋值指针引用和赋值指针引用和赋值指针引用和赋值/结构体指针结构体指针结构体指针结构体指针11.2 11.2 指针引用
26、和赋值指针引用和赋值第十一章第十一章 指针与动态数据结构指针与动态数据结构l结构体指针:结构体指针:指向结构体的指针。指针可为结构体别名。指向结构体的指针。指针可为结构体别名。例:例: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),TARGET:date TYPE(date_record),TARGET:date TYP
27、E(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-2 m=P.month-2;d=5+P.dayd=5+P.day PRINT*,date PRINT*,date PRINT*,P PRINT*,P PRINT*,y,m,d PRINT*,y,m,d END END !输出结果:输出结果:!1995 12 25!1995 12
28、25!1995 12 25!1995 12 25!1998 10 30!1998 10 30YearYearMonthMonthdaydayP Pdatedate1995199512122525P Pdatedateu u 指针引用指针引用u u 指针赋值指针赋值u u 结构体指针结构体指针第12页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.3 11.3 11.3 11.3 整型指针整型指针整型指针整型指针/概述概述概述概述u整型指针整型指针:地址按地址按4 4字节整数对待的指针。整型指针可参与整数运算。字节整数对待的指针。整型指针可参与整数运算。u整型指针组成整型指针组成:
29、指针、基变量、目标对象。指针、基变量、目标对象。u创建指针步骤创建指针步骤:第一步:将一个指针基变量链接在一个整型指针上。第一步:将一个指针基变量链接在一个整型指针上。POINTER(POINTER(,)第二步:将目标对象地址赋值给整型指针。第二步:将目标对象地址赋值给整型指针。=LOC(=LOC()=MALLOC(=MALLOC()u标准函数标准函数LOCLOC功能功能:获得目标对象起始内存地址。获得目标对象起始内存地址。u标准函数标准函数MALLOCMALLOC功能功能:计算表达式值计算表达式值n n,分配,分配n n个字节存储单元,获个字节存储单元,获得存储单元起始地址。得存储单元起始地
30、址。(示例示例)11.3 11.3 整型指针整型指针第十一章第十一章 指针与动态数据结构指针与动态数据结构u u 概述概述u u 例例11.611.6u u 例例11.711.7第13页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.3 11.3 11.3 11.3 整型指针整型指针整型指针整型指针/例例例例11.611.611.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 !等价于设置等价于设置B(2)B(2
31、)为为125.0125.0 PRINT*,B(2)PRINT*,B(2)END END通过通过POINTERPOINTER语句语句,将指针基数组将指针基数组B B与目标对象数组与目标对象数组A A建立联系建立联系,即指针即指针P P中中存放的数组存放的数组A A的起始地址就是数组的起始地址就是数组B B的起始地址的起始地址,所以运行程序后所以运行程序后,输出输出B(2)B(2)的值为的值为125.0125.0。11.3 11.3 整型指针整型指针第十一章第十一章 指针与动态数据结构指针与动态数据结构u u 概述概述u u 例例11.611.6u u 例例11.711.7第14页,本讲稿共24页
32、苏州科技大学计算中心苏州科技大学计算中心11.3 11.3 11.3 11.3 整型指针整型指针整型指针整型指针/例例例例11.711.711.711.7分析下面程序分析下面程序 INTEGER:A(5),B INTEGER:A(5),B POINTER POINTER(P,BP,B)P=LOC(A)P=LOC(A)DO I=1,5 DO I=1,5 B=I*10 B=I*10 P=P+4 P=P+4 ENDDO ENDDO PRINT*,A PRINT*,A END END !输出结果为:输出结果为:10 20 30 40 50 10 20 30 40 50 通过指针运算和指针基变量通过指针
33、运算和指针基变量B B的赋值操作的赋值操作,生成数组生成数组A A的的5 5个元素值。个元素值。通过指针运算和指针基变量通过指针运算和指针基变量B B的赋值操作的赋值操作,生成数组生成数组A A的的5 5个元素值。个元素值。整型指针整型指针P P增加增加4,4,相当于把数组的下标加相当于把数组的下标加1 1。11.3 11.3 整型指针整型指针第十一章第十一章 指针与动态数据结构指针与动态数据结构A AB B1 2 3 4 51 2 3 4 5P PP PP PP PP Pu u 概述概述u u 例例11.611.6u u 例例11.711.7第15页,本讲稿共24页苏州科技大学计算中心苏州科
34、技大学计算中心11.3 11.3 11.3 11.3 整型指针整型指针整型指针整型指针/概述概述概述概述/示例示例示例示例u整型指针整型指针:地址按地址按4 4字节整数对待的指针。整型指针可参与整数字节整数对待的指针。整型指针可参与整数运算。运算。u整型指针组成整型指针组成:指针、基变量、目标对象。指针、基变量、目标对象。u创建指针步骤创建指针步骤:第一步:将一个指针基变量链接在一个整型指针上。第一步:将一个指针基变量链接在一个整型指针上。POINTER(POINTER(,)第二步:将目标对象地址赋值给整型指针。第二步:将目标对象地址赋值给整型指针。=LOC(=LOC()=MALLOC(=MA
35、LLOC()u标准函数标准函数LOCLOC功能功能:获得目标对象起始内存地址。获得目标对象起始内存地址。u标准函数标准函数MALLOCMALLOC功能功能:计算表达式值计算表达式值n n,分配,分配n n个字节存储单元,获得存个字节存储单元,获得存储单元起始地址。储单元起始地址。(示例示例)11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构u u 概述概述u u 例例11.611.6u u 例例11.711.7INTEGER INTEGER:I,J=20I,J=20POINTERPOINTER(P,IP,I)!建立指针基变量建立指针基变量I I和目标对象和目标对
36、象J J的等价关系的等价关系P=LOC(J)P=LOC(J)!将目标对象将目标对象J J的地址赋予整型指针变量的地址赋予整型指针变量P PPRINT*,P,I,J PRINT*,P,I,J!输出结果为:输出结果为:4442932 20 204442932 20 20I=30I=30PRINT*,P,I,J PRINT*,P,I,J!输出结果为:输出结果为:4442932 30 304442932 30 30J=40J=40PRINT*,P,I,J PRINT*,P,I,J!输出结果为:输出结果为:4442932 40 404442932 40 40ENDEND第16页,本讲稿共24页苏州科技大
37、学计算中心苏州科技大学计算中心11.4 11.4 11.4 11.4 整型指针整型指针整型指针整型指针/NULLIFY/NULLIFY/NULLIFY/NULLIFYuNULLIFY:NULLIFY:将指针设置为空状态。空状态可用标准函数将指针设置为空状态。空状态可用标准函数ASSOCIATEDASSOCIATED进进行检测。行检测。指针声明后,一般应将其设置为空状态。指针声明后,一般应将其设置为空状态。如:如:INTEGERINTEGER,POINTER :PPOINTER :P NULLIFY NULLIFY(P P)11.4 11.4 与指针相关的函数和语句与指针相关的函数和语句第十一章
38、第十一章 指针与动态数据结构指针与动态数据结构u u NULLIFYNULLIFYu u ASSOCIATEDASSOCIATEDu u ALLOCATEALLOCATEu u DEALLOCATEDEALLOCATE第17页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.4 11.4 11.4 11.4 整型指针整型指针整型指针整型指针/ASSOCIATED/ASSOCIATED/ASSOCIATED/ASSOCIATEDuASSOCIATED:ASSOCIATED:判定是否有目标对象与指针链接。判定是否有目标对象与指针链接。如:如:REAL A1(:),A2(:),A3(5)
39、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=A3 A2=A3 !指针赋值!指针赋值 S1=ASSOCIATED(A1)S1=ASSOCIATED(A1)!结果!结果TRUE;TRUE;指针指针A1A1已指向目标变量已指向目标变量 S2=ASSOCIATED(A1,A3)S2=ASSOCIATED(A1,A3)!结果!结果TRUE;A1TRUE;A1已指向已指向A3A3 S3=ASS
40、OCIATED(A1,A2)S3=ASSOCIATED(A1,A2)!结果!结果TRUE;A1TRUE;A1和和A2A2都指向都指向A3A311.4 11.4 与指针相关的函数和语句与指针相关的函数和语句第十一章第十一章 指针与动态数据结构指针与动态数据结构u u NULLIFYNULLIFYu u ASSOCIATEDASSOCIATEDu u ALLOCATEALLOCATEu u DEALLOCATEDEALLOCATE第18页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.4 11.4 11.4 11.4 整型指针整型指针整型指针整型指针/ALLOCATE/ALLOCAT
41、E/ALLOCATE/ALLOCATEuALLOCATE:ALLOCATE:为指针分配所指向的存储空间。为指针分配所指向的存储空间。如:如:REAL REAL,POINTER :P1POINTER :P1 ALLOCATE(P1)ALLOCATE(P1)P1=911.911 P1=911.91111.4 11.4 与指针相关的函数和语句与指针相关的函数和语句第十一章第十一章 指针与动态数据结构指针与动态数据结构u u NULLIFYNULLIFYu u ASSOCIATEDASSOCIATEDu u ALLOCATEALLOCATEu u DEALLOCATEDEALLOCATEP1P1P1P
42、1911.911911.911第19页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.4 11.4 11.4 11.4 整型指针整型指针整型指针整型指针/DEALLOCATE/DEALLOCATE/DEALLOCATE/DEALLOCATEuDEALLOCATE:DEALLOCATE:释放指针所指存储空间。释放指针所指存储空间。如:如:REAL REAL,POINTER :P1POINTER :P1 ALLOCATE(P1)ALLOCATE(P1)P1=911.911 P1=911.911 DEALLOCATE DEALLOCATE(P1P1)11.4 11.4 与指针相关的函数
43、和语句与指针相关的函数和语句第十一章第十一章 指针与动态数据结构指针与动态数据结构P1P1P1P1911.911911.911u u NULLIFYNULLIFYu u ASSOCIATEDASSOCIATEDu u ALLOCATEALLOCATEu u DEALLOCATEDEALLOCATE第20页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.5 11.5 11.5 11.5 指针数组指针数组指针数组指针数组/指针数组指针数组指针数组指针数组11.5 11.5 指针数组指针数组第十一章第十一章 指针与动态数据结构指针与动态数据结构u u 指针数组指针数组u u 函数返回函
44、数返回u指针数组指针数组:具有具有POINTERPOINTER属性的数组。指针数组类似动态数属性的数组。指针数组类似动态数组,声明时,指针数组不指定数组维的上下界。如:组,声明时,指针数组不指定数组维的上下界。如:REAL,DIMENSION(:),POINTER:AREAL,DIMENSION(:),POINTER:A u存储分配存储分配:指针数组需通过指针数组需通过ALLOCATEALLOCATE语句分配存储空间。如:语句分配存储空间。如:ALLOCATEALLOCATE(A A(5050)例:使用指针数组存储下三角矩阵。例:使用指针数组存储下三角矩阵。(程序程序)1 0 0 01 0 0
45、 01 1 0 01 1 0 01 1 1 01 1 1 01 1 1 11 1 1 1R R RRR11111111111 12 23 34 4T第21页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.5 11.5 11.5 11.5 指针数组指针数组指针数组指针数组/函数返回函数返回函数返回函数返回11.5 11.5 指针数组指针数组第十一章第十一章 指针与动态数据结构指针与动态数据结构uFORTRAN90FORTRAN90允许指针数组作为函数值返回。允许指针数组作为函数值返回。PROGRAM exam1110PROGRAM exam1110 IMPLICIT NONE IM
46、PLICIT NONE INTEGER,DIMENSION(10):X=(/11,8,15,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(INTEGER,DIMENSION(:):),POINTER:array,POINTER:array INTEGER,DIMENSION(IN
47、TEGER,DIMENSION(:):):A A INTEGER I,J,T INTEGER I,J,T ALLOCATE(array(SIZE(A)ALLOCATE(array(SIZE(A)!为为arrayarray数组分配存储单元数组分配存储单元 array=A array=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(
48、J)=array(I)array(I)=T array(I)=T ENDIF ENDIF ENDDO ENDDO ENDDO ENDDO END FUNCTION array END FUNCTION arrayENDENDu u 指针数组指针数组u u 函数返回函数返回第22页,本讲稿共24页苏州科技大学计算中心苏州科技大学计算中心11.5 11.5 11.5 11.5 指针数组指针数组指针数组指针数组/概述概述概述概述/程序程序程序程序11.5 11.5 指针数组指针数组第十一章第十一章 指针与动态数据结构指针与动态数据结构u u 指针数组指针数组u u 函数返回函数返回u指针数组指针数组
49、:具有具有POINTERPOINTER属性的数组。指针数组类似动态数属性的数组。指针数组类似动态数组,声明时,指针数组不指定数组维的上下界。如:组,声明时,指针数组不指定数组维的上下界。如:REAL,DIMENSION(:),POINTER:AREAL,DIMENSION(:),POINTER:A u存储分配存储分配:指针数组需通过指针数组需通过ALLOCATEALLOCATE语句分配存储空间。如:语句分配存储空间。如:ALLOCATEALLOCATE(A A(5050)例:使用指针数组存储下三角矩阵。例:使用指针数组存储下三角矩阵。(程序程序)1 0 0 01 0 0 01 1 0 01 1
50、 0 01 1 1 01 1 1 01 1 1 11 1 1 1R R RRR11111111111 12 23 34 4TPROGRAM exam119PROGRAM exam119 TYPE row TYPE row INTEGER,DIMENSION(:),POINTER:R INTEGER,DIMENSION(:),POINTER:R END TYPE END TYPE INTEGER,PARAMETER:N=4 INTEGER,PARAMETER:N=4 TYPE(row),DIMENSION(N):T TYPE(row),DIMENSION(N):T!声明类型为声明类型为rowro