指针与动态数据结构精选课件.ppt

上传人:石*** 文档编号:65775137 上传时间:2022-12-08 格式:PPT 页数:25 大小:3.13MB
返回 下载 相关 举报
指针与动态数据结构精选课件.ppt_第1页
第1页 / 共25页
指针与动态数据结构精选课件.ppt_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《指针与动态数据结构精选课件.ppt》由会员分享,可在线阅读,更多相关《指针与动态数据结构精选课件.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、关于指针与动态数据结构第一页,本课件共有25页11.1 11.1 11.1 11.1 概述概述概述概述/概述概述概述概述l静态数据结构静态数据结构:在编译时为其分配存储空间在编译时为其分配存储空间,大小不能改变。大小不能改变。l静态数据结构优点静态数据结构优点:分配算法简单分配算法简单,易于实现易于实现,使用方便。使用方便。l静态数据结构缺点静态数据结构缺点:易浪费存储空间易浪费存储空间,易产生下标越界错误。易产生下标越界错误。l动态数据结构动态数据结构:在运行时为其分配存储空间在运行时为其分配存储空间,大小可改变。大小可改变。l动态数据结构优点动态数据结构优点:可节约存储空间,灵活,应用广。

2、可节约存储空间,灵活,应用广。l动态数据结构缺点动态数据结构缺点:分配算法复杂分配算法复杂,实现难度大。实现难度大。象象链表链表、树结构树结构、图结构图结构等数据结构都适合用动态数据结构实等数据结构都适合用动态数据结构实现,指针是实现动态数据结构的有效手段。现,指针是实现动态数据结构的有效手段。指针和动态数据结构广泛应用于软件设计,熟练掌握和指针和动态数据结构广泛应用于软件设计,熟练掌握和灵活应用指针和动态数据结构求解问题,可使程序更加简洁、灵活应用指针和动态数据结构求解问题,可使程序更加简洁、紧凑、高效。紧凑、高效。11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数

3、据结构uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第二页,本课件共有25页11.1 11.1 11.1 11.1 概述概述概述概述/存储结构存储结构存储结构存储结构l存储单元地址存储单元地址:存储单元在内存中的排列序号(编号)。存储单元在内存中的排列序号(编号)。l存储分配存储分配:系统为变量、数组、结构体、指针分配连续存储单元,用系统为变量、数组、结构体、指针分配连续存储单元,用于存储有关数据,其变量名、数组名、结构体名、指针名代表连续存于存储有关数据,其变量名、数组名、结构体名、指针名代表连续存储单元首地址。储单元首地址。l指针变量

4、(指针)指针变量(指针):为其分配的存储单元用于保存其它变量、数为其分配的存储单元用于保存其它变量、数组、结构体的地址。通过改变其所存储的地址内容实现动态数据组、结构体的地址。通过改变其所存储的地址内容实现动态数据结构。结构。l示例:示例:INTEGER,TARGET :I=1255INTEGER,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/)INTEGER:A(3)=(/35,45,55/)INTEGER,POINTER:P

5、 INTEGER,POINTER:P P=I P=I11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第三页,本课件共有25页11.1 11.1 11.1 11.1 概述概述概述概述/访问方式访问方式访问方式访问方式11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构l直接访问直接访问:直接访问存储单元中的内容。如对普通变量、数直接访问存储单元中的内容。如对普通变量、数组元素、结构体成员的访问,采用直接访问方式。如图组元素、结构体成

6、员的访问,采用直接访问方式。如图11-11-2 2所示。所示。l间接访问间接访问:先从存储单元中得到被访问存储单元地址,然后先从存储单元中得到被访问存储单元地址,然后通过该地址访问被访问存储单元中的内容。如对指针变量通过该地址访问被访问存储单元中的内容。如对指针变量的访问,采用间接访问方式。如图的访问,采用间接访问方式。如图11-311-3所示。所示。l指针变量存储单元中保存目标变量地址,通常用箭头表示。指针变量存储单元中保存目标变量地址,通常用箭头表示。F90F90指针保存目标变量名称,将指针看成目标变量的别名。指针保存目标变量名称,将指针看成目标变量的别名。l指针变量声明后指针变量声明后,

7、未分配存储空间未分配存储空间,访问前需分配存储空间。访问前需分配存储空间。(示例示例)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*Iuu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第四页,本课件共有25页11.1 11.1 11.1 11.1 概述概述概述概述/指针声明指针声明指针声明指针声明11.1 11.1 概述概述第十一章第

8、十一章 指针与动态数据结构指针与动态数据结构lPOINTERPOINTER属性属性:通过通过POINTERPOINTER属性声明指针变量。属性声明指针变量。lTARGETTARGET属性属性:通过通过TARGETTARGET属性声明指针可指的目标变量。属性声明指针可指的目标变量。l一般格式:一般格式:,POINTER:,POINTER:,或或 POINTER POINTER,例:例:REAL Q1,Q2REAL Q1,Q2 INTEGER,POINTER:P1,P2 INTEGER,POINTER:P1,P2!声明指向整型变量的指针声明指向整型变量的指针P1P1和和P2P2 POINTER Q

9、1 POINTER Q1 !声明指向实型变量的指针声明指向实型变量的指针Q1Q1 POINTER IQ1,IQ2 POINTER IQ1,IQ2!声明指向整型变量的指针声明指向整型变量的指针IQ1IQ1和和IQ2IQ2 uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第五页,本课件共有25页11.1 11.1 11.1 11.1 概述概述概述概述/指针状态指针状态指针状态指针状态11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构l指针有三种状态指针有三种状态:未定义、空指针、被关联。未定义、空指针、被关联。u

10、未定义:程序在初始状态中未定义所有指针。未定义:程序在初始状态中未定义所有指针。u空指针:指针已定义,但未成为目标变量别名。空指针:指针已定义,但未成为目标变量别名。u被关联:指针已定义,已成为目标变量别名。被关联:指针已定义,已成为目标变量别名。uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第六页,本课件共有25页11.1 11.1 11.1 11.1 概述概述概述概述/概述概述概述概述/动态数据结构示例动态数据结构示例动态数据结构示例动态数据结构示例l静态数据结构静态数据结构:在编译时为其分配存储空间在编译时为其分配存储空间,大小不能

11、改变。大小不能改变。l静态数据结构优点静态数据结构优点:分配算法简单分配算法简单,易于实现易于实现,使用方便。使用方便。l静态数据结构缺点静态数据结构缺点:易浪费存储空间易浪费存储空间,易产生下标越界错误。易产生下标越界错误。l动态数据结构动态数据结构:在运行时为其分配存储空间在运行时为其分配存储空间,大小可改变。大小可改变。l动态数据结构优点动态数据结构优点:可节约存储空间,灵活,应用广。可节约存储空间,灵活,应用广。l动态数据结构缺点动态数据结构缺点:分配算法复杂分配算法复杂,实现难度大。实现难度大。象象链表、树结构、图结构链表、树结构、图结构等数据结构都适合用动态数据结等数据结构都适合用

12、动态数据结构实现,指针是实现动态数据结构的有效手段。构实现,指针是实现动态数据结构的有效手段。指针和动态数据结构广泛应用于软件设计,熟练掌握和灵指针和动态数据结构广泛应用于软件设计,熟练掌握和灵活应用指针和动态数据结构求解问题,可使程序更加简洁、紧活应用指针和动态数据结构求解问题,可使程序更加简洁、紧凑、高效。凑、高效。11.1 11.1 概述概述第二章第二章 FORTRAN90FORTRAN90开发环境开发环境a a1 1a a2 2a an n 链表链表树结构树结构图结构图结构uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第七页,本课

13、件共有25页11.1 11.1 11.1 11.1 概述概述概述概述/存储结构存储结构存储结构存储结构/示例示例示例示例l存储单元地址存储单元地址:存储单元在内存中的排列序号(编号)。存储单元在内存中的排列序号(编号)。l存储分配存储分配:系统为变量、数组、结构体、指针分配连续存储系统为变量、数组、结构体、指针分配连续存储单元,用于存储有关数据,其变量名、数组名、结构体名、单元,用于存储有关数据,其变量名、数组名、结构体名、指针名代表连续存储单元首地址。指针名代表连续存储单元首地址。l指针变量(指针)指针变量(指针):为其分配的存储单元用于保存其它变量、数组、为其分配的存储单元用于保存其它变量

14、、数组、结构体的地址。通过改变其所存储的地址内容实现动态数据结构。结构体的地址。通过改变其所存储的地址内容实现动态数据结构。l示例:示例:INTEGER,TARGET :I=1255INTEGER,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/)INTEGER:A(3)=(/35,45,55/)INTEGER,POINTER:P INTEGER,POINTER:P P=I P=I11.1 11.1 概述概述第十一章第十一章 指针

15、与动态数据结构指针与动态数据结构 12551255534.45534.45CHINACHINA35354545555510001000整型变量整型变量I,I,地址地址1000,41000,4字节字节,值值12551255实型变量实型变量R,R,地址地址1004,41004,4字节字节,值值534.45534.45字符型变量字符型变量S,S,地址地址1008,51008,5字节字节,值值CHINACHINA整型数组整型数组A,A,地址地址1013,121013,12字节字节,值值3535、4545、5555指针变量指针变量P,P,地址地址1025,41025,4字节字节,值为值为10001000

16、0 01 11000100010041004100810081013101310251025n n图图图图11-1 11-1 11-1 11-1 变量、数组、指针以及与地址的关系变量、数组、指针以及与地址的关系变量、数组、指针以及与地址的关系变量、数组、指针以及与地址的关系 uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第八页,本课件共有25页11.1 11.1 11.1 11.1 概述概述概述概述/访问方式访问方式访问方式访问方式/示例示例示例示例11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构l直接访

17、问直接访问:直接访问存储单元中的内容。如对普通变量、数直接访问存储单元中的内容。如对普通变量、数组元素、结构体成员的访问,采用直接访问方式。如图组元素、结构体成员的访问,采用直接访问方式。如图11-11-2 2所示。所示。l间接访问间接访问:先从存储单元中得到被访问存储单元地址,然后先从存储单元中得到被访问存储单元地址,然后通过该地址访问被访问存储单元中的内容。如对指针变量通过该地址访问被访问存储单元中的内容。如对指针变量的访问,采用间接访问方式。如图的访问,采用间接访问方式。如图11-311-3所示。所示。l指针变量存储单元中保存目标变量地址,通常用箭头表示。指针变量存储单元中保存目标变量地

18、址,通常用箭头表示。F90F90指针保存目标变量名称,将指针看成目标变量的别名。指针保存目标变量名称,将指针看成目标变量的别名。l指针变量声明后指针变量声明后,未分配存储空间未分配存储空间,访问前需分配存储空间。访问前需分配存储空间。(示例示例)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 使用指针实现两个整数交换使用指针实现两个整数交换INT

19、EGER,TARGET:I,J INTEGER,TARGET:I,J !声明两个目标变量声明两个目标变量I I和和J JINTEGER,POINTER:P1,P2,P3 INTEGER,POINTER:P1,P2,P3!声明三个指针变量声明三个指针变量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 !通过指针变量间接输出通过指针变量间接

20、输出I I和和J J的值的值P3=P1;P1=P2;P2=P3 P3=P1;P1=P2;P2=P3 !交换指针交换指针P1P1和和P2P2指向的目标变量指向的目标变量PRINT*,PRINT*,已交换数据:已交换数据:,P1,P2 ,P1,P2!通过指针变量间接输出通过指针变量间接输出J J和和I I的值的值ENDENDI I2525P1P1图图11-4 11-4 指针交换指针交换J J3535P2P2J J3535P2P2P1P1P3P3交换前交换前交换后交换后uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第九页,本课件共有25页11.

21、2 11.2 11.2 11.2 指针引用和赋值指针引用和赋值指针引用和赋值指针引用和赋值/指针引用指针引用指针引用指针引用l指针引用:指针引用:引用指针所指目标变量。引用指针所指目标变量。11.2 11.2 指针引用和赋值指针引用和赋值第十一章第十一章 指针与动态数据结构指针与动态数据结构uu 指针引用指针引用uu 指针赋值指针赋值uu 结构体指针结构体指针!例例11.211.2INTEGER,TARGET:R=25INTEGER,TARGET:R=25INTEGER,POINTER:PINTEGER,POINTER:PP=RP=RM=3*P-4M=3*P-4PRINT*,P,MPRINT*

22、,P,MENDEND!结果:结果:2525,7171!例例11.311.3INTEGER,POINTERINTEGER,POINTER:P1,PP1,PINTEGER,TARGETINTEGER,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,P2P1=RP1=RP2=P1P2=P1PRINT*,P1,P2,RPRINT*,P

23、1,P2,RENDEND !结果:结果:1313,1313,1313第十页,本课件共有25页11.2 11.2 11.2 11.2 指针引用和赋值指针引用和赋值指针引用和赋值指针引用和赋值/指针赋值指针赋值指针赋值指针赋值l别名赋值:别名赋值:将目标变量名作为别名赋值给指针。将目标变量名作为别名赋值给指针。l数据赋值:数据赋值:将数据表达式值赋值给指针所指目标变量。将数据表达式值赋值给指针所指目标变量。l一般格式:一般格式:=11.2 11.2 指针引用和赋值指针引用和赋值第十一章第十一章 指针与动态数据结构指针与动态数据结构!例例11.511.5INTEGR,TARGETINTEGR,TAR

24、GET:R1=25R1=25INTEGR,TARGETINTEGR,TARGET:R2=35R2=35INTEGER,POINTERINTEGER,POINTER:P1,P2P1,P2P1=R1P1=R1P2=R2P2=R2P1=P2P1=P2PRINT*,P1,P2PRINT*,P1,P2ENDEND!结果:结果:3535,3535P1P1P1P1R1R12525R2R2P2P23535R1R13535R2R2P2P23535uu 指针引用指针引用uu 指针赋值指针赋值uu 结构体指针结构体指针第十一页,本课件共有25页11.2 11.2 11.2 11.2 指针引用和赋值指针引用和赋值指针

25、引用和赋值指针引用和赋值/结构体指针结构体指针结构体指针结构体指针11.2 11.2 指针引用和赋值指针引用和赋值第十一章第十一章 指针与动态数据结构指针与动态数据结构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

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*,date PRINT*,date PRINT*,P PRINT*,P PRINT*,y,m,d PRINT*

27、,y,m,d END END !输出结果:输出结果:!1995 12 25!1995 12 25!1995 12 25!1995 12 25!1998 10 30!1998 10 30YearYearMonthMonthdaydayP Pdatedate1995199512122525P Pdatedateuu 指针引用指针引用uu 指针赋值指针赋值uu 结构体指针结构体指针第十二页,本课件共有25页11.3 11.3 11.3 11.3 整型指针整型指针整型指针整型指针/概述概述概述概述l整型指针整型指针:地址按地址按4 4字节整数对待的指针。整型指针可参与整数字节整数对待的指针。整型指针可

28、参与整数运算。运算。l整型指针组成整型指针组成:指针、基变量、目标对象。指针、基变量、目标对象。l创建指针步骤创建指针步骤:u第一步:将一个指针基变量链接在一个整型指针上。第一步:将一个指针基变量链接在一个整型指针上。POINTER(POINTER(,)u第二步:将目标对象地址赋值给整型指针。第二步:将目标对象地址赋值给整型指针。=LOC(=LOC()=MALLOC(=MALLOC()l标准函数标准函数LOCLOC功能功能:获得目标对象起始内存地址。获得目标对象起始内存地址。l标准函数标准函数MALLOCMALLOC功能功能:计算表达式值计算表达式值n n,分配,分配n n个字节存储单元,获个

29、字节存储单元,获得存储单元起始地址。得存储单元起始地址。(示例示例)11.3 11.3 整型指针整型指针第十一章第十一章 指针与动态数据结构指针与动态数据结构uu 概述概述uu 例例11.611.6uu 例例11.711.7第十三页,本课件共有25页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

30、)B(2)为为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 整型指针整型指针第十一章第十一章 指针与动态数据结构指针与动态数据结构uu 概述概述uu 例例11.611.6uu 例例11.711.7第十四页,本课件共有2

31、5页11.3 11.3 11.3 11.3 整型指针整型指针整型指针整型指针/例例例例11.711.711.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*10 B=I*10 P=P+4 P=P+4 ENDDO ENDDO PRINT*,A PRINT*,A END END !输出结果为:输出结果为:10 20 30 40 5010 20 30 40 50 通过指针运算和指针基变量通过指针运算和指针基变量B B的赋值操作的赋值操

32、作,生成数组生成数组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 Puu 概述概述uu 例例11.611.6uu 例例11.711.7第十五页,本课件共有25页11.3 11.3 11.3 11.3 整型指针整型指针整型指针整型指

33、针/概述概述概述概述/示例示例示例示例l整型指针整型指针:地址按地址按4 4字节整数对待的指针。整型指针可参与整数运字节整数对待的指针。整型指针可参与整数运算。算。l整型指针组成整型指针组成:指针、基变量、目标对象。指针、基变量、目标对象。l创建指针步骤创建指针步骤:u第一步:将一个指针基变量链接在一个整型指针上。第一步:将一个指针基变量链接在一个整型指针上。POINTER(POINTER(,)u第二步:将目标对象地址赋值给整型指针。第二步:将目标对象地址赋值给整型指针。=LOC(=LOC()=MALLOC(=MALLOC()l标准函数标准函数LOCLOC功能功能:获得目标对象起始内存地址。获

34、得目标对象起始内存地址。l标准函数标准函数MALLOCMALLOC功能功能:计算表达式值计算表达式值n n,分配,分配n n个字节存储单元,个字节存储单元,获得存储单元起始地址。获得存储单元起始地址。(示例示例)11.1 11.1 概述概述第十一章第十一章 指针与动态数据结构指针与动态数据结构uu 概述概述uu 例例11.611.6uu 例例11.711.7INTEGER INTEGER:I,J=20I,J=20POINTERPOINTER(P,IP,I)!建立指针基变量建立指针基变量I I和目标对象和目标对象J J的等价关系的等价关系P=LOC(J)P=LOC(J)!将目标对象将目标对象J

35、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第十六页,本课件共有25页11.4 11.4 11.4 11.4 整型指针整型指针整型指针整型指针/NULLIFY/NU

36、LLIFY/NULLIFY/NULLIFYlNULLIFY:NULLIFY:将指针设置为空状态。空状态可用标准函数将指针设置为空状态。空状态可用标准函数ASSOCIATEDASSOCIATED进行检测。进行检测。指针声明后,一般应将其设置为空状态。指针声明后,一般应将其设置为空状态。如:如:INTEGERINTEGER,POINTER :PPOINTER :P NULLIFY NULLIFY(P P)11.4 11.4 与指针相关的函数和语句与指针相关的函数和语句第十一章第十一章 指针与动态数据结构指针与动态数据结构uu NULLIFYNULLIFYuu ASSOCIATEDASSOCIATE

37、Duu ALLOCATEALLOCATEuu DEALLOCATEDEALLOCATE第十七页,本课件共有25页11.4 11.4 11.4 11.4 整型指针整型指针整型指针整型指针/ASSOCIATED/ASSOCIATED/ASSOCIATED/ASSOCIATEDlASSOCIATED:ASSOCIATED:判定是否有目标对象与指针链接。判定是否有目标对象与指针链接。如:如:REAL A1(:),A2(:),A3(5)REAL A1(:),A2(:),A3(5)POINTER A1,A2 POINTER A1,A2 TARGET A3 TARGET A3 LOGICAL S1,S2,S

38、3 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=ASSOCIATED(A1,A2)S3=ASSOCIATED(A1,A2)!结果!结果TRUE;A1TRUE;A1和和A2A2都指向都指向A3A311.4 11.4 与指针相关

39、的函数和语句与指针相关的函数和语句第十一章第十一章 指针与动态数据结构指针与动态数据结构uu NULLIFYNULLIFYuu ASSOCIATEDASSOCIATEDuu ALLOCATEALLOCATEuu DEALLOCATEDEALLOCATE第十八页,本课件共有25页11.4 11.4 11.4 11.4 整型指针整型指针整型指针整型指针/ALLOCATE/ALLOCATE/ALLOCATE/ALLOCATElALLOCATE:ALLOCATE:为指针分配所指向的存储空间。为指针分配所指向的存储空间。如:如:REALREAL,POINTER :P1POINTER :P1 ALLOCA

40、TE(P1)ALLOCATE(P1)P1=911.911 P1=911.91111.4 11.4 与指针相关的函数和语句与指针相关的函数和语句第十一章第十一章 指针与动态数据结构指针与动态数据结构uu NULLIFYNULLIFYuu ASSOCIATEDASSOCIATEDuu ALLOCATEALLOCATEuu DEALLOCATEDEALLOCATEP1P1P1P1911.911911.911第十九页,本课件共有25页11.4 11.4 11.4 11.4 整型指针整型指针整型指针整型指针/DEALLOCATE/DEALLOCATE/DEALLOCATE/DEALLOCATElDEAL

41、LOCATE:DEALLOCATE:释放指针所指存储空间。释放指针所指存储空间。如:如:REALREAL,POINTER :P1POINTER :P1 ALLOCATE(P1)ALLOCATE(P1)P1=911.911 P1=911.911 DEALLOCATE DEALLOCATE(P1P1)11.4 11.4 与指针相关的函数和语句与指针相关的函数和语句第十一章第十一章 指针与动态数据结构指针与动态数据结构P1P1P1P1911.911911.911uu NULLIFYNULLIFYuu ASSOCIATEDASSOCIATEDuu ALLOCATEALLOCATEuu DEALLOCA

42、TEDEALLOCATE第二十页,本课件共有25页11.5 11.5 11.5 11.5 指针数组指针数组指针数组指针数组/指针数组指针数组指针数组指针数组11.5 11.5 指针数组指针数组第十一章第十一章 指针与动态数据结构指针与动态数据结构uu 指针数组指针数组uu 函数返回函数返回l指针数组指针数组:具有具有POINTERPOINTER属性的数组。指针数组类似动态数属性的数组。指针数组类似动态数组,声明时,指针数组不指定数组维的上下界。如:组,声明时,指针数组不指定数组维的上下界。如:REAL,DIMENSION(:),POINTER:AREAL,DIMENSION(:),POINTE

43、R:A l存储分配存储分配:指针数组需通过指针数组需通过ALLOCATEALLOCATE语句分配存储空间。如:语句分配存储空间。如:ALLOCATEALLOCATE(A A(5050)例:使用指针数组存储下三角矩阵。例:使用指针数组存储下三角矩阵。(程序程序)1 0 0 01 0 0 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第二十一页,本课件共有25页11.5 11.5 11.5 11.5 指针数组指针数组指针数组指针数组/函数返回函数返回函数返回函数返回11.5 11.5 指针数组指针数

44、组第十一章第十一章 指针与动态数据结构指针与动态数据结构lFORTRAN90FORTRAN90允许指针数组作为函数值返回。允许指针数组作为函数值返回。PROGRAM exam1110PROGRAM exam1110 IMPLICIT NONE IMPLICIT 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

45、 FUNCTION array(A)FUNCTION array(A)INTEGER,DIMENSION(INTEGER,DIMENSION(:),POINTER:array:),POINTER:array INTEGER,DIMENSION(:):A INTEGER,DIMENSION(:):A INTEGER I,J,T INTEGER I,J,T ALLOCATE(array(SIZE(A)ALLOCATE(array(SIZE(A)!为为arrayarray数组分配存储单元数组分配存储单元 array=Aarray=A DO I=1,SIZE(A)-1 DO I=1,SIZE(A)-1

46、 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 FUNCTION array END FUNCTION arrayENDENDuu 指针数组指针数组uu 函数返回函数返回第二十二页,本课件共有25页11.5 11.5 11.5 11.5 指针数组指针数组

47、指针数组指针数组/概述概述概述概述/程序程序程序程序11.5 11.5 指针数组指针数组第十一章第十一章 指针与动态数据结构指针与动态数据结构uu 指针数组指针数组uu 函数返回函数返回l指针数组指针数组:具有具有POINTERPOINTER属性的数组。指针数组类似动态数属性的数组。指针数组类似动态数组,声明时,指针数组不指定数组维的上下界。如:组,声明时,指针数组不指定数组维的上下界。如:REAL,DIMENSION(:),POINTER:AREAL,DIMENSION(:),POINTER:A l存储分配存储分配:指针数组需通过指针数组需通过ALLOCATEALLOCATE语句分配存储空间

48、。如:语句分配存储空间。如:ALLOCATEALLOCATE(A A(5050)例:使用指针数组存储下三角矩阵。例:使用指针数组存储下三角矩阵。(程序程序)1 0 0 01 0 0 01 1 0 01 1 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

49、,PARAMETER:N=4 INTEGER,PARAMETER:N=4 TYPE(row),DIMENSION(N):T TYPE(row),DIMENSION(N):T!声明类型为声明类型为rowrow的数组的数组T T DO I=1,N DO I=1,N ALLOCATE(T(I)%R(1:I)ALLOCATE(T(I)%R(1:I)!为数组元素分配空间为数组元素分配空间 ENDDOENDDO DO I=1,N DO I=1,N T(I)%R(1:I)=1 T(I)%R(1:I)=1 !为下三角矩阵为下三角矩阵T T赋值赋值 ENDDOENDDODO I=1,NDO I=1,N PRIN

50、T*,T(I)%R(1:I)PRINT*,T(I)%R(1:I)!打印矩阵打印矩阵T TENDDOENDDOENDEND第二十三页,本课件共有25页11.7 11.7 11.7 11.7 习题十习题十习题十习题十一一一一1 1何谓静态数据结构和静态存储分配?何谓静态数据结构和静态存储分配?2.2.何谓动态数据结构和动态存储分配?何谓动态数据结构和动态存储分配?3 3何谓直接访问和间接访问?何谓直接访问和间接访问?4 4指针有几种状态?指针有几种状态?5 5从键盘输入从键盘输入3 3个整数个整数,使用指针对其排序使用指针对其排序,并输出。编写程序实现之。并输出。编写程序实现之。6 6从从键键盘盘

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁