资源预览内容
第1页 / 共37页
第2页 / 共37页
第3页 / 共37页
第4页 / 共37页
第5页 / 共37页
第6页 / 共37页
第7页 / 共37页
第8页 / 共37页
第9页 / 共37页
第10页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1. 概述 2. 指针引用与赋值 3. 整型指针 4. 与指针相关的函数和语句 5. 指针数组 6. 动态链表,第十一讲 指针与动态数据结构,第十一讲 指针与动态数据结构,11.1 概述/概述,静态数据结构:在编译时为其分配存储空间,大小不能改变。静态数据结构优点:分配算法简单,易于实现,使用方便。静态数据结构缺点:易浪费存储空间,易产生下标越界错误。动态数据结构:在运行时为其分配存储空间,大小可改变。动态数据结构优点:可节约存储空间,灵活,应用广。动态数据结构缺点:分配算法复杂,实现难度大。 象链表、树结构、图结构等数据结构都适合用动态数据结构实现,指针是实现动态数据结构的有效手段。 指针和动态数据结构广泛应用于软件设计,熟练掌握和灵活应用指针和动态数据结构求解问题,可使程序更加简洁、紧凑、高效。,11.1 概述,第十一讲 指针与动态数据结构,概述 存储结构 访问方式 指针声明 指针状态,11.1 概述/概述/动态数据结构示例,静态数据结构:在编译时为其分配存储空间,大小不能改变。静态数据结构优点:分配算法简单,易于实现,使用方便。静态数据结构缺点:易浪费存储空间,易产生下标越界错误。动态数据结构:在运行时为其分配存储空间,大小可改变。动态数据结构优点:可节约存储空间,灵活,应用广。动态数据结构缺点:分配算法复杂,实现难度大。 象链表、树结构、图结构等数据结构都适合用动态数据结构实现,指针是实现动态数据结构的有效手段。 指针和动态数据结构广泛应用于软件设计,熟练掌握和灵活应用指针和动态数据结构求解问题,可使程序更加简洁、紧凑、高效。,11.1 概述,概述 存储结构 访问方式 指针声明 指针状态,第十一讲 指针与动态数据结构,11.1 概述/存储结构,存储单元地址:存储单元在内存中的排列序号(编号)。存储分配:系统为变量、数组、结构体、指针分配连续存储单元,用于存储有关数据,其变量名、数组名、结构体名、指针名代表连续存储单元首地址。指针变量(指针):为其分配的存储单元用于保存其它变量、数组、结构体的地址。通过改变其所存储的地址内容实现动态数据结构。示例: INTEGER,TARGET : I=1255 REAL : R=534.45 CHARACTER*5 :S=CHINA INTEGER : A(3)=(/35,45,55/) INTEGER,POINTER : P P=I,11.1 概述,第十一讲 指针与动态数据结构,概述 存储结构 访问方式 指针声明 指针状态,11.1 概述/存储结构/示例,存储单元地址:存储单元在内存中的排列序号(编号)。存储分配:系统为变量、数组、结构体、指针分配连续存储单元,用于存储有关数据,其变量名、数组名、结构体名、指针名代表连续存储单元首地址。指针变量(指针):为其分配的存储单元用于保存其它变量、数组、结构体的地址。通过改变其所存储的地址内容实现动态数据结构。示例: INTEGER,TARGET : I=1255 REAL : R=534.45 CHARACTER*5 :S=CHINA INTEGER : A(3)=(/35,45,55/) INTEGER,POINTER : P P=I,11.1 概述,第十一讲 指针与动态数据结构,概述 存储结构 访问方式 指针声明 指针状态,11.1 概述/访问方式,11.1 概述,第十一讲 指针与动态数据结构,概述 存储结构 访问方式 指针声明 指针状态,11.1 概述/访问方式/示例,11.1 概述,第十一讲 指针与动态数据结构,概述 存储结构 访问方式 指针声明 指针状态,11.1 概述/指针声明,11.1 概述,第十一讲 指针与动态数据结构,POINTER属性:通过POINTER属性声明指针变量。TARGET属性:通过TARGET属性声明指针可指的目标变量。一般格式: ,POINTER:, 或 POINTER , 例: REAL Q1,Q2 INTEGER,POINTER:P1,P2!声明指向整型变量的指针P1和P2 POINTER Q1 !声明指向实型变量的指针Q1 POINTER IQ1,IQ2!声明指向整型变量的指针IQ1和IQ2,概述 存储结构 访问方式 指针声明 指针状态,11.1 概述/指针状态,11.1 概述,第十一讲 指针与动态数据结构,指针有三种状态:未定义、空指针、被关联。未定义:程序在初始状态中未定义所有指针。空指针:指针已定义,但未成为目标变量别名。被关联:指针已定义,已成为目标变量别名。,概述 存储结构 访问方式 指针声明 指针状态,11.2 指针引用和赋值/指针引用,指针引用:引用指针所指目标变量。,11.2 指针引用和赋值,第十一讲 指针与动态数据结构,指针引用 指针赋值 结构体指针,!例11.2INTEGER,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,11.2 指针引用和赋值/指针赋值,别名赋值:将目标变量名作为别名赋值给指针。数据赋值:将数据表达式值赋值给指针所指目标变量。一般格式:= = ,11.2 指针引用和赋值,第十一讲 指针与动态数据结构,!例11.5INTEGER,TARGET:R1=25INTEGER,TARGET:R2=35INTEGER,POINTER:P1,P2P1=R1P2=R2P1=P2WRITE(*,*) P1,P2END!结果:35,35,指针引用 指针赋值 结构体指针,11.2 指针引用和赋值/结构体指针,11.2 指针引用和赋值,第十一讲 指针与动态数据结构,指针引用 指针赋值 结构体指针,11.3 整型指针/概述,整型指针:地址按4字节整数对待的指针。整型指针可参与整数运算。整型指针组成:指针、基变量、目标对象。创建指针步骤:第一步:将一个指针基变量链接在一个整型指针上。 POINTER(,)第二步:将目标对象地址赋值给整型指针。 =LOC() =MALLOC()标准函数LOC功能:获得目标对象起始内存地址。标准函数MALLOC功能:计算表达式值n,分配n个字节存储单元,获得存储单元起始地址。 (示例),11.3 整型指针,第十一讲 指针与动态数据结构,概述 例11.6 例11.7,11.3 整型指针/概述/示例,整型指针:地址按4字节整数对待的指针。整型指针可参与整数运算。整型指针组成:指针、基变量、目标对象。创建指针步骤:第一步:将一个指针基变量链接在一个整型指针上。 POINTER(,)第二步:将目标对象地址赋值给整型指针。 =LOC() =MALLOC()标准函数LOC功能:获得目标对象起始内存地址。标准函数MALLOC功能:计算表达式值n,分配n个字节存储单元,获得存储单元起始地址。 (示例),11.3 概述,第十一讲 指针与动态数据结构,概述 例11.6 例11.7,INTEGER :I,J=20POINTER(P,I)!建立指针基变量I和目标对象J的等价关系P=LOC(J) !将目标对象J的地址赋予整型指针变量PWRITE(*,*) P,I,J !输出结果为:4442932 20 20I=30WRITE(*,*) P,I,J !输出结果为:4442932 30 30J=40WRITE(*,*) P,I,J !输出结果为:4442932 40 40END,11.3 整型指针/例11.6,分析下面程序 REAL A(10),B(5) POINTER(P,B) P=LOC(A) A(2)=125.0 !等价于设置B(2)为125.0 WRITE(*,*) B(2) END通过POINTER语句,将指针基数组B与目标对象数组A建立联系,即指针P中存放的数组A的起始地址就是数组B的起始地址,所以运行程序后,输出B(2)的值为125.0。,11.3 整型指针,第十一讲 指针与动态数据结构,概述 例11.6 例11.7,11.3 整型指针/例11.7,分析下面程序 INTEGER : A(5),B POINTER(P,B) P=LOC(A) DO I=1,5 B=I*10 P=P+4 ENDDO WRITE(*,*) A END !输出结果为: 10 20 30 40 50 通过指针运算和指针基变量B的赋值操作,生成数组A的5个元素值。通过指针运算和指针基变量B的赋值操作,生成数组A的5个元素值。整型指针P增加4,相当于把数组的下标加1。,11.3 整型指针,第十一讲 指针与动态数据结构,概述 例11.6 例11.7,11.4与指针相关的函数和语句/NULLIFY,NULLIFY:将指针设置为空状态。空状态可用标准函数ASSOCIATED进行检测。 指针声明后,一般应将其设置为空状态。 如:INTEGER,POINTER : P NULLIFY(P),11.4 与指针相关的函数和语句,第十一讲 指针与动态数据结构,NULLIFY ASSOCIATED ALLOCATE DEALLOCATE,11.4与指针相关的函数和语句/ASSOCIATED,ASSOCIATED:判定是否有目标对象与指针链接。 如: REAL A1(:),A2(:),A3(5) POINTER A1,A2 TARGET A3 LOGICAL S1,S2,S3 A1=A3 !指针赋值 A2=A3 !指针赋值 S1=ASSOCIATED(A1)!结果TRUE;指针A1已指向目标变量 S2=ASSOCIATED(A1,A3) !结果TRUE;A1已指向A3 S3=ASSOCIATED(A1,A2) !结果TRUE;A1和A2都指向A3,11.4 与指针相关的函数和语句,第十一讲 指针与动态数据结构,NULLIFY ASSOCIATED ALLOCATE DEALLOCATE,11.4与指针相关的函数和语句/ALLOCATE,ALLOCATE:为指针分配所指向的存储空间。 如: REAL,POINTER : P1 ALLOCATE(P1) P1=911.911,11.4 与指针相关的函数和语句,第十一讲 指针与动态数据结构,NULLIFY ASSOCIATED ALLOCATE DEALLOCATE,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号