如何在Delphi中实现C语言中静态变量的功能

如何在Delphi中实现C语言中静态变量的功能

DELPHI编程 2007-09-02 14:56:01 阅读28 评论0   字号: 订阅

如何在Delphi中实现C语言中静态变量的功能

 

在函数(function)或过程(procedure)内定义的变量(variable)为局部变量,存放在栈(stack)内,当函数或过程结束时,里面所保存的内容都会随着栈的释放而消失。而在C语言中在定义局部变量时可以用static来定义静态变量,该变量在整个程序的运行中的值一直可以保留,可以为程序实现特殊的功能。但Delphi却没有这一功能,如果为实现这一功能用全局变量显然会破坏程序的封装性,是不可取的。其实这一功能在Delphi中也是可以通过const定义常量的方法来变通实现这一功能。常量本来是不允许在程序中进行修改的,如果想要修改它们的值,有以下两种方法可以实现:

一、通过{$J}的开关来控制编译器是否允许程序修改常量

根据Delphi的帮助文档描述:$J指令控制是否允许定义为常量的值是否允许被修改。在{$J+}状态,定义的常量可以被修改,常量在此时相当于一个可以被初始化数值的变量。在{$J-}状态定义的常量是真正的常量,任何尝试对常量的修改都会使编译器报错。具体示例如下:

{$J+}
procedure TForm1.Button1Click(Sender: TObject);
const i:integer=
100;
begin
  i:=i+
100;
  showmessage(inttostr(i));
end;
{$J-}

需要说明的是,早期的DelphiPASCAL版本,常量都是可写的,相当于{$J+}状态,以前的源代码在使用可写常量需要重新编译时必须使用{$J+}进行编译。

二、通过指针来实现此功能

通常用Delphi来写程序很少会用到指针,其实Delphi的指针功能和C语言的指针功能一样的强大,此处不做过多讲述。如果想要修改常量的值的话,可以定义一个指针变量,使用指针指向此常量的地址,然后通过指针来修改常量。具体示例如下:

    procedure TForm1.Button1Click(Sender: TObject);
const i:integer=
100;
  var p:PInteger;
begin
  p:=@i;
  P^:=p^+
100;
  showmessage(inttostr(i));
end;

如果不是出于使用静态变量的目的,建议最好不要使用以上两种方法,更不要通过这种方法来改变全局常的值,那样会对程序带来灾难性的后果。必须使用的话,建议使用第一种方法,使用完后应尽快使用{$-}来关掉改写常量功能。

 

原帖地址:http://hunto.blog.163.com/blog/static/147405269200782256158/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值