带星号和&符号的函数参数

时间:2014-09-27 19:28:51

标签: c++

我在这里有一个功能,我正试图绕过它。

有人可以解释这段代码在做什么吗?

unsigned int Function( BYTE *&, BYTE );

我从未见过*&的参数。它用于多种功能。我试过寻找书籍以寻找答案并在线查看。我找不到关于这种格式的任何信息以及它正在做什么。

任何帮助我都会很感激。

现在我已经看到使用*&的功能,但从未像上面那样在一起。

另外,我知道返回值是无符号int。 :)

我大多只是询问一个参数。

由于

5 个答案:

答案 0 :(得分:4)

在声明中

unsigned int Function( BYTE *&, BYTE );

*&代表通过引用传递指针,这意味着对此函数内的指针所做的更改将对原始指针进行,而不是对其 copy 。如果您需要修改指针而不是指针指向的对象,您可能希望通过引用传递指针。

@ FredOverflow' s example如下:

template< typename T>    
void paranoid_delete( T *&p)
{
    delete p;
    p = nullptr;
}

您还可以通过指针传递指针,如下所示:

void freeAndZero( void** ptr)
{
    free( *ptr);
    *ptr = 0;
}

如果没有引用,您只会更改指针的本地副本,而不会影响调用者。

答案 1 :(得分:3)

编写复杂系统的简单事物可能是编程中最重要的概念。让我们分解这里发生的事情。

您知道如果您看到BYTE*,那么该类型就是“指向BYTE的指针”。

现在,如果您看到T&,就知道这是“对T的引用”。

当这些内容合并后,T等于BYTE*,即可获得(BYTE*)&。由于语法分组规则,BYTE*&意味着相同的事情。而且意思仍然是“对某事物的引用......而某些东西是指向BYTE的东西”。

(请注意,语法分组规则很重要...... const T T BYTE*写为const (BYTE*)BYTE* const,但不一样作为const BYTE*

答案 2 :(得分:0)

unsigned int Function( BYTE *&, BYTE );

第一个参数是“对指向BYTE的指针”类型。从右到左阅读,会更容易理解。

BYTE * &
^    ^ ^
|    | |------ Reference to  
|    |------- Pointer to
|----------- BYTE (duh).

您也可以使用cdecl并在BYTEchar之前用Function替换声明中的任何字母:

  

声明f作为函数(引用指向char,char的指针)返回   无符号

答案 3 :(得分:0)

从右到左解析参数表达式:BYTE * &是对BYTE *的引用。从右到左的解析通常对指针和引用很有用。

答案 4 :(得分:0)

第一个参数是BYTE *还是BYTE * &,你仍然传递一个类型为BYTE *的指针作为来自调用者的第一个参数。

第一个参数中的&符允许 Function 函数更改指针引用的地址。对第一个参数的任何修改都会从调用函数的角度更改第一个参数的地址。

如果第一个参数的类型是 BYTE*而不是 BYTE *&,则该参数也将是存储 BYTE的地址。

unsigned int Function( BYTE *&, BYTE );

可以按如下方式调用此函数:

int main(int argc, char *argv[]) {
    BYTE  b;
    BYTE* ptrToByte;
    unsigned int FunctionResult;
    b = 22;
    ptrToByte = &b;
    FunctionResult = Function(ptrToByte, b);

    /* At this point, ptrToByte may or may not have */
    /* changed, depending on what lines of code the Function function */
    /* executed */
}

<小时/> 其他笔记