fortran指针与动态数据结构.pptx





《fortran指针与动态数据结构.pptx》由会员分享,可在线阅读,更多相关《fortran指针与动态数据结构.pptx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 1.1 1 1.1 1 1.1 1 1.1 概 述概 述概 述概 述/概 述概 述概 述概 述/动 态 数 据 结 构 示 例动 态 数 据 结 构 示 例动 态 数 据 结 构 示 例动 态 数 据 结 构 示 例l静态数据结构静态数据结构:在编译时为其分配存储空间在编译时为其分配存储空间,大小不能改变。大小不能改变。l静态数据结构优点静态数据结构优点:分配算法简单分配算法简单,易于实现易于实现,使用方便。使用方便。l静态数据结构缺点静态数据结构缺点:易浪费存储空间易浪费存储空间,易产生下标越界错误。易产生下标越界错误。l动态数据结构动态数据结构:在运行时为其分配存储空间在运行时为其分配
2、存储空间,大小可改变。大小可改变。l动态数据结构优点动态数据结构优点:可节约存储空间,灵活,应用广。可节约存储空间,灵活,应用广。l动态数据结构缺点动态数据结构缺点:分配算法复杂分配算法复杂,实现难度大。实现难度大。象象链表、树结构、图结构链表、树结构、图结构等数据结构都适合用动态数据等数据结构都适合用动态数据结构实现,指针是实现动态数据结构的有效手段。结构实现,指针是实现动态数据结构的有效手段。指针和动态数据结构广泛应用于软件设计,熟练掌握和指针和动态数据结构广泛应用于软件设计,熟练掌握和灵活应用指针和动态数据结构求解问题,可使程序更加简洁、灵活应用指针和动态数据结构求解问题,可使程序更加简
3、洁、紧凑、高效。紧凑、高效。11.1 11.1 概述概述a a1 1a a2 2a an n 链表链表树结构树结构图结构图结构uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第十一讲第十一讲 指针与动态数据结构指针与动态数据结构第1页/共36页1 1.1 1 1.1 1 1.1 1 1.1 概 述概 述概 述概 述/存 储 结 构存 储 结 构存 储 结 构存 储 结 构l存储单元地址存储单元地址:存储单元在内存中的排列序号(编号)。存储单元在内存中的排列序号(编号)。l存储分配存储分配:系统为变量、数组、结构体、指针分配连续存储系统为变量
4、、数组、结构体、指针分配连续存储单元,用于存储有关数据,其变量名、数组名、结构体名、单元,用于存储有关数据,其变量名、数组名、结构体名、指针名代表连续存储单元指针名代表连续存储单元首地址首地址。l指针变量(指针)指针变量(指针):为其分配的存储单元用于保存其它变量、为其分配的存储单元用于保存其它变量、数组、结构体的地址。通过改变其所存储的地址内容实现数组、结构体的地址。通过改变其所存储的地址内容实现动态数据结构。动态数据结构。l示例:示例:INTEGER,TARGET :I=1255INTEGER,TARGET :I=1255 REAL:R=534.45 REAL:R=534.45 CHARA
5、CTER*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 概述概述第十一讲第十一讲 指针与动态数据结构指针与动态数据结构uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第2页/共36页1 1.1 1 1.1 1 1.1 1 1.1 概 述概 述概 述概 述/存 储 结 构存 储 结 构存 储 结 构存 储 结 构/示 例示 例
6、示 例示 例l存储单元地址存储单元地址:存储单元在内存中的排列序号(编号)。存储单元在内存中的排列序号(编号)。l存储分配存储分配:系统为变量、数组、结构体、指针分配连续存储系统为变量、数组、结构体、指针分配连续存储单元,用于存储有关数据,其变量名、数组名、结构体名、单元,用于存储有关数据,其变量名、数组名、结构体名、指针名代表连续存储单元首地址。指针名代表连续存储单元首地址。l指针变量(指针)指针变量(指针):为其分配的存储单元用于保存其它变量、为其分配的存储单元用于保存其它变量、数组、结构体的地址。通过改变其所存储的地址内容实现数组、结构体的地址。通过改变其所存储的地址内容实现动态数据结构
7、。动态数据结构。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 概述概述第十一讲第十一讲 指针与动态数据结构指针与动态数据结构 12551255534.45534.45CHINACHINA3535454
8、5555510001000整型变量整型变量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字节字节,值为值为100010000 01 11000100010041004100810081013101310251025n n图图12-
9、1 12-1 变量、数组、指针以及与地址的关系变量、数组、指针以及与地址的关系 uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第3页/共36页1 1.1 1 1.1 1 1.1 1 1.1 概 述概 述概 述概 述/访 问 方 式访 问 方 式访 问 方 式访 问 方 式11.1 11.1 概述概述第十一讲第十一讲 指针与动态数据结构指针与动态数据结构l直接访问直接访问:直接访问存储单元中的内容。如对普通变量、数直接访问存储单元中的内容。如对普通变量、数组元素、结构体成员的访问,采用直接访问方式。如图组元素、结构体成员的访问,采用直接访问
10、方式。如图12-12-2 2所示。所示。l间接访问间接访问:先从存储单元中得到被访问存储单元地址,然后先从存储单元中得到被访问存储单元地址,然后通过该地址访问被访问存储单元中的内容。如对指针变量通过该地址访问被访问存储单元中的内容。如对指针变量的访问,采用间接访问方式。如图的访问,采用间接访问方式。如图12-312-3所示。所示。l指针变量存储单元中保存目标变量地址,通常用箭头表示。指针变量存储单元中保存目标变量地址,通常用箭头表示。F90F90指针保存目标变量名称,将指针看成目标变量的别名。指针保存目标变量名称,将指针看成目标变量的别名。l指针变量声明后指针变量声明后,未分配存储空间未分配存
11、储空间,访问前需分配存储空间。访问前需分配存储空间。(示例示例)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 指针状态指针状态第4页/共36页1 1.1 1 1.1 1 1.1 1 1.1 概 述概 述概 述概 述/访 问 方 式访 问 方 式访 问 方 式访 问 方 式/示 例示 例示 例示 例1
12、1.1 11.1 概述概述第十一讲第十一讲 指针与动态数据结构指针与动态数据结构l直接访问直接访问:直接访问存储单元中的内容。如对普通变量、数直接访问存储单元中的内容。如对普通变量、数组元素、结构体成员的访问,采用直接访问方式。如图组元素、结构体成员的访问,采用直接访问方式。如图12-12-2 2所示。所示。l间接访问间接访问:先从存储单元中得到被访问存储单元地址,然后先从存储单元中得到被访问存储单元地址,然后通过该地址访问被访问存储单元中的内容。如对指针变量通过该地址访问被访问存储单元中的内容。如对指针变量的访问,采用间接访问方式。如图的访问,采用间接访问方式。如图12-312-3所示。所示
13、。l指针变量存储单元中保存目标变量地址,通常用箭头表示。指针变量存储单元中保存目标变量地址,通常用箭头表示。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*Iuu
14、概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态!例11.1 使用指针实现两个整数交换INTEGER,TARGET:I,J !声明两个目标变量I和JINTEGER,POINTER:P1,P2,P3!声明三个指针变量P1、P2和P3I=25;J=35 !给目标变量I和J直接赋值P1=I;P2=J !给指针分配指向I和J的存储空间 WRITE(*,*)未交换数据:,P1,P2!通过指针变量间接输出I和J的值P3=P1;P1=P2;P2=P3 !交换指针P1和P2指向的目标变量PRINT*,已交换数据:,P1,P2!通过指针变量间接输出J和I的值END
15、I I2525P1P1图图12-4 12-4 指针交换指针交换J J3535P2P2J J3535P2P2P1P1P3P3交换前交换前交换后交换后I I2525第5页/共36页1 1.1 1 1.1 1 1.1 1 1.1 概 述概 述概 述概 述/指 针 声 明指 针 声 明指 针 声 明指 针 声 明11.1 11.1 概述概述第十一讲第十一讲 指针与动态数据结构指针与动态数据结构lPOINTERPOINTER属性属性:通过通过POINTERPOINTER属性声明指针变量。属性声明指针变量。lTARGETTARGET属性属性:通过通过TARGETTARGET属性声明指针可指的目标变量。属性
16、声明指针可指的目标变量。l一般格式:一般格式:,POINTER:,POINTER:,或或 POINTER POINTER,例:例:REAL Q1,Q2REAL Q1,Q2 INTEGER,POINTER:P1,P2 INTEGER,POINTER:P1,P2!声明指向整型变量的指针声明指向整型变量的指针P1P1和和P2P2 POINTER Q1POINTER Q1 !声明指向实型变量的指针声明指向实型变量的指针Q1Q1 POINTER IQ1,IQ2POINTER IQ1,IQ2!声明指向整型变量的指针声明指向整型变量的指针IQ1IQ1和和IQ2IQ2 uu 概述概述uu 存储结构存储结构uu
17、 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第6页/共36页1 1.1 1 1.1 1 1.1 1 1.1 概 述概 述概 述概 述/指 针 状 态指 针 状 态指 针 状 态指 针 状 态11.1 11.1 概述概述第十一讲第十一讲 指针与动态数据结构指针与动态数据结构l指针有三种状态指针有三种状态:未定义、空指针、被关联。未定义、空指针、被关联。u未定义:程序在初始状态中未定义所有指针。未定义:程序在初始状态中未定义所有指针。u空指针:指针已定义,但未成为目标变量别名。空指针:指针已定义,但未成为目标变量别名。u被关联:指针已定义,已成为目标变量别名。被关联:指针已定义,
18、已成为目标变量别名。uu 概述概述uu 存储结构存储结构uu 访问方式访问方式uu 指针声明指针声明uu 指针状态指针状态第7页/共36页1 1.2 1 1.2 1 1.2 1 1.2 指 针 引 用 和 赋 值指 针 引 用 和 赋 值指 针 引 用 和 赋 值指 针 引 用 和 赋 值/指 针 引 用指 针 引 用指 针 引 用指 针 引 用l指针引用:指针引用:引用指针所指目标变量。引用指针所指目标变量。11.2 11.2 指针引用和赋值指针引用和赋值第十一讲第十一讲 指针与动态数据结构指针与动态数据结构uu 指针引用指针引用uu 指针赋值指针赋值uu 结构体指针结构体指针!例11.2I
19、NTEGER,TARGET:R=25INTEGER,POINTER:PP=RM=3*P-4WRITE(*,*)P,MEND!结果:25,71!例11.3INTEGER,POINTER:P1,PINTEGER,TARGET:R=12P=RR=2*PWRITE(*,*)P,REND!结果:24,24!例11.4INTEGER,TARGET:R=13INTEGER,POINTER:P1,P2P1=RP2=P1WRITE(*,*)P1,P2,R END!结果:13,13,13第8页/共36页1 1.2 1 1.2 1 1.2 1 1.2 指 针 引 用 和 赋 值指 针 引 用 和 赋 值指 针 引
20、用 和 赋 值指 针 引 用 和 赋 值/指 针 赋 值指 针 赋 值指 针 赋 值指 针 赋 值l别名赋值:别名赋值:将目标变量名作为别名赋值给指针。将目标变量名作为别名赋值给指针。l数据赋值:数据赋值:将数据表达式值赋值给指针所指目标变量。将数据表达式值赋值给指针所指目标变量。l一般格式:一般格式:=11.2 11.2 指针引用和赋值指针引用和赋值第十一讲第十一讲 指针与动态数据结构指针与动态数据结构!例11.5INTEGER,TARGET:R1=25INTEGER,TARGET:R2=35INTEGER,POINTER:P1,P2P1=R1P2=R2P1=P2WRITE(*,*)P1,P
21、2END!结果:35,35P1P1R125R2P235R135R2P235uu 指针引用指针引用uu 指针赋值指针赋值uu 结构体指针结构体指针第9页/共36页1 1.2 1 1.2 1 1.2 1 1.2 指 针 引 用 和 赋 值指 针 引 用 和 赋 值指 针 引 用 和 赋 值指 针 引 用 和 赋 值/结 构 体 指 针结 构 体 指 针结 构 体 指 针结 构 体 指 针11.2 11.2 指针引用和赋值指针引用和赋值第十一讲第十一讲 指针与动态数据结构指针与动态数据结构l结构体指针:结构体指针:指向结构体的指针。指针可为结构体别名。指向结构体的指针。指针可为结构体别名。例:例:T
22、YPE 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 TYPE(date_record),POINTER:P TYPE(date_record),POINTER:P P=dateP=date P.year=1995 P.year=1995;P.m
23、onth=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 WRITE(*,*)WRITE(*,*)datedate WRITE(*,*)WRITE(*,*)P P WRITE(*,*)WRITE(*,*)y,m,dy,m,d END END !输出结果:输出结果:!1995 12 25!1995 12 25!1995 12 25!1995 12 25!1998 10 30!1998 10 30YearYearMonthMonthdaydayP Pdated
24、ate1995199512122525P Pdatedateuu 指针引用指针引用uu 指针赋值指针赋值uu 结构体指针结构体指针第10页/共36页1 1.3 1 1.3 1 1.3 1 1.3 整 型 指 针整 型 指 针整 型 指 针整 型 指 针/概 述概 述概 述概 述l整型指针整型指针:地址按地址按4 4字节整数对待的指针。整型指针可参与整字节整数对待的指针。整型指针可参与整数运算。数运算。l整型指针组成整型指针组成:指针、基变量、目标对象。指针、基变量、目标对象。l创建指针步骤创建指针步骤:u第一步:将一个指针基变量链接在一个整型指针上。第一步:将一个指针基变量链接在一个整型指针上
25、。POINTER(POINTER(,)u第二步:将目标对象地址赋值给整型指针。第二步:将目标对象地址赋值给整型指针。=LOC(=LOC()=MALLOC(=MALLOC()l标准函数标准函数LOCLOC功能功能:获得目标对象起始内存地址。获得目标对象起始内存地址。l标准函数标准函数MALLOCMALLOC功能功能:计算表达式值计算表达式值n n,分配,分配n n个字节存储单个字节存储单元,获得存储单元起始地址。元,获得存储单元起始地址。(示例示例)11.3 11.3 整型指针整型指针第十一讲第十一讲 指针与动态数据结构指针与动态数据结构uu 概述概述uu 例例11.611.6uu 例例11.7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fortran 指针 动态 数据结构

限制150内