[C++语法语义探讨] 什么时候会用到这样的参数 *&param

zjumty 2007-04-29
我最近在书中看到有这样的函数定义代码
ReturnType func(ClassType *&m)

什么时候会用到 *&m的参数啊, 这个是什么意思啊.

&m,传引用
*param,传指针

*&m是传什么? 引用的指针?
wzgme 2007-04-29
¶这是什么符号?

ClassType * :指向ClassType 类型的指针
&m :引用

合起来ClassType *&m  : 指向ClassType 类型指针的引用

函数参数这么写就是为了引用传递。
小帽子 2007-05-11
wzgme 写道


合起来ClassType *&m  : 指向ClassType 类型指针的引用



楼上的哥哥
指向ClassType 类型指针的引用   直接传ClassType &m就可以了吧   

    我知道在C++里 参数如果是"类"的话 一般传递他的引用  这是为了效率 因为传引用 的话 就无须构造了
wzgme 2007-05-11
ClassType &m

这是传引用啊,那个是用引用的方式传递指针。
小帽子 2007-05-11
那 *&m  的地址是什么呢?
qiezi 2007-05-13
就是个引用类型的参数,引用的类型是指针,简单使用的例子:

1、使用指针:
void GetMemory(char** p, size_t size) {
    *p = malloc(size);
}


2、使用引用:
void GetMemory(char*& p, size_t size) {
    p = malloc(size);
}


如果是这样就传不回去了:
void GetMemory(char* p, size_t size) {
    p = malloc(size);
}
pstinghua 2007-06-03
传的是引用,指针的引用,像这种复杂类型,从里往外读
jimmy_c 2007-10-04
*&的含义基本等同于**,当然区别是引用不是指针。
因为C++中鼓励使用&,所以为了避免更多的*,有人就把**改写为了*&,目的都是为了传递回一个指针的值,例如,在函数中new 一个对象。
dayn9 2007-10-09
*和&本身就有点人格分裂,D&E中提到确实也有不得已的苦衷。
我觉得不该这么用,也许**更妥当,不应该因为语言特性的人格分裂,而让程序员精神分裂。
jimmy_c 2007-10-10
**和*&比较起来更容易让人精神分裂,因为它具有四种可能的语义:
指向指针的指针;
指针数组;
指向数组的指针;
二维数组;
而相比较而言,*&的含义比较单一,多半是在返回一个指针或数组的时候才会用到(比如:查找,new)。
之所以会出现这种混杂的情况,还是因为&的功能比较弱造成的,一旦赋值就无法改变。造成了很多写代码时不必要的麻烦。
觉得C++有些语法真是有点不可理喻,类似的还有::*。我觉得是比&还要难用的东西。所以C++中才会有那么多非直观的语言技巧存在,实际上是非常不必要的。
Global site tag (gtag.js) - Google Analytics