在C/C++里面, int i =5;
const int * p = &i;
*p = 6; //Error来防止p指向的内容被改动。
但是在Delphi里,好像找不到同样功能的语法。const
ci:Integer=8;
var
PC:PInt; ShowMessage(Inttostr(ci)); // 8
PC:=@Ci;
PC^:=9;
ShowMessage(Inttostr(ci)); // 9
连常量的内容都会被改了。如果用const声明指针,只能限制指针不能指向别的地方,但也无法保护指向的内容。请教各位,要实现类似C/C++里的指针常量应该怎么做?
const int * p = &i;
*p = 6; //Error来防止p指向的内容被改动。
但是在Delphi里,好像找不到同样功能的语法。const
ci:Integer=8;
var
PC:PInt; ShowMessage(Inttostr(ci)); // 8
PC:=@Ci;
PC^:=9;
ShowMessage(Inttostr(ci)); // 9
连常量的内容都会被改了。如果用const声明指针,只能限制指针不能指向别的地方,但也无法保护指向的内容。请教各位,要实现类似C/C++里的指针常量应该怎么做?
解决方案 »
- 俺不太懂,请大家帮忙解释一下。。不懂就问。
- 打印数据库中的OLE对象;如何实现???
- 达人们看过来啊:fastreport注册问题
- Kingron(单身走我路……) ,你给我听着.....
- :::::菜题::如何查询快(视图,存储过程,执行SQL语句):::::
- 关于复合报表,QReport的Composite Report(QRCompositeReport)?可曾用过?
- 菜鸟问题,在线等待立即给分
- 问大家一个算法的问题,答对有很多分阿
- 请问怎么把checklistbox内的字段动态的添加倒库里面,就是一个table的字段里?
- 三层问题。怎样才能防止我应用服务器不被人家访问?
- 如何将一个整数转化位十六进制的数值,并按二进制数值方式写入注册表?
- TdxDBGrid,TclientSocket这两个东东,是那个控件名下的东东,那里有下载,在急等,
不过就算有也不会安全到哪里去的,C++里面不是还有个const_cast吗?
const
i: integer = 25;
p : ^integer = @i;
这样就好了。
打个比方,有一个类A,正在维护一个链表。与用户交互的是类B。
类B要取数据时就从类A得到一个指向链表上某个节点的指针。当用户要删除该节点时,类B就把该指针返回给类A,类A就执行方法把它从链表上删除。
由于类A传给类B的是链表上的一个节点,如果类B可以更改这个指针的内容(比如更改了该节点的前后指针),就有可能造成链表的崩溃。这样的话,类的“黑匣”就会被破坏了。因此我就想Delphi有没有这样的语法,可以实现类似C中的指针常量一样的功能,保护链表不被破坏。如果不用指针的话,要在链表上定位B返回的要删除的节点就比较麻烦了,节点(是一个记录)中的各个域都要进行比较。
既然链表的维护是由A来完成的,那么A就不应该暴露链表给外部类/函数直接访问,所有的操作应该由A来完成,A只能提供若干方法让外部类/函数来请求执行某些操作。
不用指针,你可以返回一个结点的Index呀。
VCL的很多类似类,比如TStringList,都使用这种技术的。