大头龙仔Blog

A strong man can save himself. A great man can save another.

关于C++的指针引用

| Comments

今天和牛人同事cml讨论指针引用(其实是他告诉我的),像下面代码:

void *p = NULL;
int *pi = NULL;
pi = (int *)p;
这个我想大家都知道,再来:
void *p = NULL;
int *pi = NULL;
(void *&)pi = p;
哈哈,其实和上面是一样的,为什么呢?我开始也没反应过来,后来cml说(void *)pi后是一个临时变量,所以要再引用一下才能改变实际的值。就像swap(int &i, int &j)这样,但上面的例子还是建议写成右值版本而不是左值版本。
这样的话,之前所说的一个myfree3版本可以这么写,当然要C++哦,因为C里是没有引用这个概念的:
myfree3(int *&p)
{
    free(p);
}
也是行得通的,得益于引用这个东东。

Comments