- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
20140421.ppt-不再因为别人过得好而焦虑.ppt
笫11章指针;11.1 指针的定义与使用 ;11.1.1 指针变量的定义格式 ;INTEGER,POINTER::A1,A2
此语句定义了两个指针变量A1和A2,它们都指向整型变量。
可以将类型说明与指针说明分开,即先说明变量的类型,然后指定变量为指针。例如
INTEGER A1,A2
POINTER A1,A2
此语句同样定义了整型两个指针变量A1和A2。 ;11.1.2、指针变量的使用 ;P=3
此例中,先定义了一个指针变量P,然后定义了一个整型变量X,再通过P=X语句,使P指向X,这时两者实际上是同一个变量,就象一个人除了自己的名字外,还有外号一样。因此,无论输入的是什么整数,两者显示的结果一样。
;下面再看一个例子
例11.2
PROGRAM POINTER3
?
INTEGER, POINTER::P1,P2,P3,P4
INTEGER,TARGET:: X1,X2
INTEGER X,S1,S2,S3,S4,S5
READ*,X1,X2
X=X1*X2
P1=X1
P2=X2
P3=X1
P4=P1
S1=P1*P2
S2=P3*P2
S3=P1*X2
S4=P3*X2
S5=P4*X2
PRINT*,X=,X
; PRINT*,S1=,S1
PRINT*,S2=,S2
PRINT*,S3=,S3
PRINT*,S4=,S4
PRINT*,S5=,S5
END
输入:3 4后,输出结果为:
X=12
S1=12
S2=12
S3=12
S4=12
S5=12
;在该例中,定义了四个指针变量:P1,P2,P3,P4,通过P1=X1,使P1指向X1,P2=X2使P2指向X2,再通过P3=X1和P4=P1,使P3和P4都指向X1,因此,X、S1、S2、S3、S4、S5计算结果一样,实际上都是X1+X2。;(1) 指针变量赋值格式为:
指针变量=目标变量或者另一指针变量。
(2) 多个指针变量可以指向同一目标变量,但是,一个指针变量只能指向一个目标变量,不能同时指向多个目标变量。
(3) 指针变量与目标变量的类型应当严格一致,不存在所谓的兼容情况,即,整型指针变量所指的只能是整型变量,而不能是实型变量等。
(4) 指针变量的本质是所指变量的别名,两者在编译时会当作同一变量,指针变量的引用实际上是对目标变量的引用。 ;(5) 在程序中,指针变量通常有以下三种状态:
① 未定义状态,在程序开始时,所有的指针都处于这种状态。
② 空状态,此时指针还没有作为任何对象的别名。
在程序中,有时为了方便起见,可以让指针指向一个空对象。
INTEGER,POINTER::P=NULL()
或者
INTEGER,POINTER::P
NULLIFY(p)
③ 关联状态,此时,??针已经作为其他对象的别名。
值得注意的是只有在第三种状态时,指针才能参与运算,否则,或者编译出错,或者非法操作。;指针状态检测函数;11.2 动态变量 ;例11.3;在该例中,先定义了一个指针变量P,然后利用ALLOCATE(P)函数,为P分配空间,再给P赋值。
必须注意的是:如果去掉ALLOCATE(P)语句,则该程序运行时会出现错误,因为指针在未指定目标时是虚的,不能引用。
一般而言,ALLOCATE函数总是与DEALLOCATE函数配套使用,因为用动态分配函数为指针分配存储单元时,容易产生指针悬挂问题。所谓指针悬挂问题是指:当一个对象被释放,而释放时没有直接涉及作为其别名的指针时,就产生指针悬挂,这时,指针所占据的内存单元始终得不到释放,使用DEALLOCATE函数就可释放存储单元。
注意,对于普通变量,由于其内存空间自动回收,不存在上述问题。 ;例11.4,ALLOCATE和DEALLOCATE函数的用法,程序如下:?
PROGRAM POINTER4?
INTEGER,POINTER::P1,P2
INTEGER S
ALLOCATE(P1,P2)
READ*,P1,P2
S=P1+P2
DEALLOCATE(P1,P2)
PRINT*,S=,S
END
输入5 6
输出S=11 ;该程序中,先定义了两个指针变量P1、P2,然后用ALLOCATE函数为其分配空间,再通过键盘输入其值,运算完毕,用DEALLOCATE函数,释放其空间。
必须注意的是:DELLOCATE函数所释放的空间,一定得是不再使用的动态空间,空间一旦被释放,就不得再使用,否则将产生非法操作,如上面程序中,如果将DEALLOCATE(P1,P2)语句提前,就会产生非法操作。
注意,即使用DEALLOCATE(P)函数,释放P所指的空间,也可能产生悬挂指针问题,下面我们看一个可能产生悬挂指针的例子。 ;REA
文档评论(0)