Code

2010年9月8日星期三

有关**ptr的问题

今天恍然大悟,发现昨天想到有关pass **pointer的问题是错误的。

在function 的参数里面我们一般都是pass *ptr,这样比较安全,为什么呢?因为这样只是pass最初那个pointer的value,所以function里可以自己在做一个pointer 然后assign到这个value,然后就可以用了。原来那个pointer很safe,没有被更改,也无法被access到。

然后有一种情况我们需要access原来的pointer,比如要destroy一个queue,这时候需要free所有的指向queue的pointer,这时候就要用两个** pass pointer的address到destroy function里了。这样,原pointer就被完全操纵了。如果不是destroy action,这样pass pointer是非常危险的。如果你改变了它的位子,你就有可能找不到源数据的起始位子了。

昨天我还以为两个**会比较安全,甚至认为c++里面的reference variable也是这样implemment的。今早仔细一想,原来这是不对的。

最近好多deadline,有点stressed了。

1 条评论:

Erencie 说...

不错,我都没想到那么深。只知道**ptr是address of address。